【发布时间】:2010-11-03 07:54:14
【问题描述】:
当我构建一个包含 2 个项目 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
编辑:
所有抛出的错误都来自缺少引用的代码(都是项目引用)。我只收到三种类型的错误,如下所示。
错误 CS0012:定义了类型“X” 在未引用的程序集中。 您必须添加对程序集的引用 'Y,版本=2.0.0.0,文化=中性, PublicKeyToken=aad4cbe5d7c27078'。
错误 CS0234:类型或命名空间 名称“X”不存在于 命名空间“Y”(您是否缺少 汇编参考?)
错误 CS0246:类型或命名空间 找不到名称“X”(您是 缺少 using 指令或 汇编参考?)
在从 IDE 和 MSBuild 构建之前,我从构建路径中清除了所有以前构建的 dll。但是 IDE 工作正常,并且不会在项目的“参考”部分显示参考缺失指示器。
没有在 IDE 中手动添加参考路径。
另一个更新:
我刚刚注意到,当我从解决方案打开两个项目时,引用正确指向 IDE。但是当我在 IDE 中单独打开项目时,我提到的在 MSBuild 中出现的缺失引用会逐渐增加。很奇怪。
总结一下,
在 MSBuild 中构建 .proj - 好
在 IDE 中构建 .proj - 错误
在 MSBuild 中构建 .sln - 错误
在 IDE 中构建 .sln - 好
对我来说看起来很奇怪。非常感谢您的帮助。
【问题讨论】:
-
每当您提出问题并说有错误时,剪切和粘贴错误确实很有帮助。这适用于异常、编译器错误、构建错误...
-
顺便说一句,如果它单独构建两个项目没有问题,那么我想知道这两个项目是否需要项目引用。 OTOH,这可能是由于最近的功能允许 MSBUILD 对项目引用“聪明”。因为我从来没有理解过这个功能,所以我不能排除它;但我建议您确认是否需要所有项目引用,以及重建 B 是否会导致重建 C。
-
@blntechie:感谢您的更新。我建议您使用解决方案资源管理器;按顺序选择每个引用,然后在“属性”窗口中查看详细信息。看到任何奇怪的东西,比如一个在 obj 中,而另一个在 bin 中?此外,如果没有参考路径,那么您可能不介意查看您的 .csproj.user 文件以确保确实没有?
-
@John Saunders:感谢您的帮助。我刚刚注意到,当我从解决方案打开两个项目时,引用正确指向 IDE。但是当我在 IDE 中单独打开项目时,我提到的在 MSBuild 中出现的缺失引用会逐渐增加。很奇怪。非常感谢您的帮助。也更新问题。
-
你是怎么解决这个问题的?我也有同样的经历……