当我构建一个包含两个项目B.csproj和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
编辑:
所有抛出的错误都是由于缺少引用的代码引起的(全部都是项目引用)。我只得到了三种类型的错误,如下所示。
error CS0012: 类型“X”在未被引用的程序集中定义。您必须添加对程序集“Y、版本=2.0.0.0、Culture=neutral、PublicKeyToken=aad4cbe5d7c27078”的引用。
error CS0234: 类型或命名空间名称“X”在命名空间“Y”中不存在(是否缺少程序集引用?)
error CS0246: 无法找到类型或命名空间名称“X”(是否缺少 using 指令或程序集引用?)
在构建路径之前,我从IDE和MSBuild清除了所有先前构建的dll。但是IDE很好用,在“引用”部分中不显示任何缺失的引用指示器。
没有在IDE中手动添加任何引用路径。
另一个更新:
我刚刚注意到,当我从解决方案打开这两个项目时,引用在IDE中正确地指向。但是当我单独在IDE中打开这些项目时,我提到的缺失引用就会出现在MSBuild中。非常奇怪。
所以总结一下,
在MSBuild中构建.proj - 良好
在IDE中构建.proj - 错误
在MSBuild中构建.sln - 错误
在IDE中构建.sln - 良好
对我来说看起来非常奇怪。非常感谢您的帮助。