MSBuild正确构建具有项目引用的项目,但不是来自解决方案

bln*_*hie 10 .net msbuild

当我构建一个包含2个项目Bssproj和C.csproj的A.sln时,它有内部项目引用,它会在MSBuild中抛出引用错误.但是当我在MSBuild中单独构建B.csproj和C.csproj时,它不会抛出错误.而且在VS IDE中构建A.sln也不会抛出错误.我正在使用.NET 2.0框架.请在下面找到用于构建sln和projs的脚本.

MSBuild "<path>/A.sln" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\A.sln.log /verbosity:normal

MSBuild "<path>/B.csproj" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\B.csproj.log /verbosity:normal 

MSBuild "<path>/C.csproj" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\C.csproj.log /verbosity:normal 
Run Code Online (Sandbox Code Playgroud)

编辑:

抛出的所有错误都来自缺少引用的代码(都是项目引用).我只得到三种类型的错误,如下所示.

错误CS0012:类型"X"在未引用的程序集中定义.您必须添加对程序集"Y,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = aad4cbe5d7c27078"的引用.

错误CS0234:命名空间"Y"中不存在类型或命名空间名称"X"(您是否缺少程序集引用?)

错误CS0246:找不到类型或命名空间名称"X"(您是否缺少using指令或程序集引用?)

在从IDE和MSBuild构建之前,我从构建路径中清除了所有以前构建的dll.但IDE只是工作正常,并没有在项目的"参考"部分显示参考缺失指示器.

IDE中没有手动添加引用路径.

另一个更新:

我刚刚注意到,当我从解决方案中打开两个项目时,引用正确指向IDE.但是,当我在IDE中单独打开项目时,我提到的缺失引用在MSBuild中出现了.非常奇怪.

总结一下,

MSBuild中的Buiilding .proj - 很好

IDE中的Buiilding .proj - 错误

MSBuild中的Buiilding .sln - 错误

IDE中的Buiilding .sln - 很好

对我来说看起来很奇怪.非常感谢.

小智 8

MSBuild和VS都使用项目引用和项目依赖项来选择解决方案构建顺序.除此之外,它是未定义的 - 通常两者之间不同.检查这两个是否正确.项目依赖项在解决方案的属性中设置.如果这不起作用,请仔细检查项目中项目引用中的GUID是否与解决方案中的GUID相匹配.有时重新创建解决方案可以解决它们.