当我构建一个包含 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
Edit:
抛出的所有错误均来自缺少引用的代码(全部都是项目引用)。我只收到如下所示的三种类型的错误。
错误 CS0012:定义了类型“X”
在未引用的程序集中。
您必须添加对程序集的引用
'Y,版本=2.0.0.0,文化=中立,
PublicKeyToken=aad4cbe5d7c27078'。
错误 CS0234:类型或命名空间
名称“X”不存在于
命名空间“Y”(您是否缺少
装配参考?)
错误 CS0246:类型或命名空间
无法找到名称“X”(您是
缺少 using 指令或
装配参考?)
在从 IDE 和 MSBuild 构建之前,我从构建路径中清除了所有先前构建的 dll。但 IDE 工作正常,并且不会在项目的“参考”部分中显示参考缺失指示符。
没有在 IDE 中手动添加参考路径。
另一个更新:
我刚刚注意到,当我从解决方案中打开这两个项目时,引用在 IDE 中正确指向。但是当我在 IDE 中单独打开项目时,我提到的 MSBuild 中出现的缺失引用就会出现。非常奇怪。
总结一下,
在 MSBuild 中构建 .project - 好
在 IDE 中构建 .project - 错误
在 MSBuild 中构建 .sln - 错误
在 IDE 中构建 .sln - 好
对我来说看起来很奇怪。非常感谢帮助。
MSBuild 和 VS 都使用项目引用和项目依赖项来选择解决方案构建顺序。除此之外,它是未定义的 - 并且两者之间通常是不同的。检查这两项是否正确。项目依赖项在解决方案的属性中设置。
如果这不起作用,请仔细检查项目中的项目引用中的 GUID 是否与解决方案中的 GUID 匹配。有时重新创建解决方案可以解决这些问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)