假MSBuild步骤可以';无法解析引用

假MSBuild步骤可以';无法解析引用,msbuild,continuous-integration,f#-fake,Msbuild,Continuous Integration,F# Fake,我有一个假构建脚本,如果我使用VisualStudio构建一次项目,它将运行得非常好,但是如果我尝试重新构建,它会抛出错误,说它找不到许多nuget包和我依赖的visual studio项目的名称空间 我使用FAKE的MSBuildRelease并传入.sln文件,如下所示: Target "BuildWindowsProject" (fun _ -> MSBuildRelease "" "Build" [ "./Source/My.

我有一个假构建脚本,如果我使用VisualStudio构建一次项目,它将运行得非常好,但是如果我尝试重新构建,它会抛出错误,说它找不到许多nuget包和我依赖的visual studio项目的名称空间

我使用FAKE的MSBuildRelease并传入
.sln
文件,如下所示:

Target "BuildWindowsProject" (fun _ ->
    MSBuildRelease
        ""
        "Build"
        [ "./Source/My.Project.sln" ]
        |> Log "Windows-Build: "
)
它给出了如下一些错误,但这些错误包括解决方案内的项目和外部nuget包

The type or namespace name 'Caliburn' could not be found (are you missing a using directive or an assembly reference?)
我确实注意到,早在2011年,这篇文章就已经发布了——但它已经很旧了,我在网上找不到任何最近出现的问题


如果我先进行VisualStudio构建,然后运行构建脚本,那么效果很好,但这并不能解决构建服务器的问题。我做错了什么?

您必须自己执行深度诊断,因为考虑中的问题需要在此处发布源代码。它还可以取决于脚本运行的环境,以便获得正确的答案

您有一个关于输出的选项。使用以下开关值获取有关如何在生成期间解析引用的详细信息:

msbuild ./Source/My.Project.sln /t:Build /v:d
使用此命令,您可以导航到名为ResolveAssemblyReferenceResolveProjectReference的步骤。您可以看到所有路径,它将在其中搜索程序集,如果成功:

4>  Primary reference "System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".
4>      Resolved file path is "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Runtime.Remoting.dll".
4>      Reference found at search path location "{TargetFrameworkDirectory}".
4>          For SearchPath "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64".
4>          Considered "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64\System.Runtime.Remoting.winmd", but it didn't exist.
4>          Considered "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64\System.Runtime.Remoting.dll", but it didn't exist.
4>          Considered "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\lib\amd64\System.Runtime.Remoting.exe", but it didn't exist.
4>          For SearchPath "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64".
4>          Considered "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64\System.Runtime.Remoting.winmd", but it didn't exist.
4>          Considered "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64\System.Runtime.Remoting.dll", but it didn't exist.
4>          Considered "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64\System.Runtime.Remoting.exe", but it didn't exist.
4>          For SearchPath "{TargetFrameworkDirectory}".
4>          Considered "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Runtime.Remoting.winmd", but it didn't exist.
4>      This reference is not "CopyLocal" because it's a prerequisite file.
4>      The ImageRuntimeVersion for this reference is "v4.0.30319".

如果查看由MSBuild生成的命令行,还可以检查传递给编译器的引用,并找出其中是否需要引用

对于cl:

4>  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\x86_amd64\CL.exe 
...
/AI"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" 
...    
/FU"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll" 
/FUE:\YourProj\bin\Debug\Your.Proj.dll 
/FU"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\System.Configuration.dll" 
...
/errorReport:prompt 
YourSourceCodeFiles.cpp
/clr:nostdlib 
对于csc:

2>  C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe
...
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\mscorlib.dll" 
/reference:E:\svn\PRM\trunk\PRM30\bin\Debug\Prm.Base.dll 
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Configuration.dll" 
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Core.dll" 
...
(为了简单起见,省略了大多数参数)