khe*_*bie 14 msbuild gac msbuild-projectreference
我有一个"Project A",它引用System.Web.Mvc和CopyLocal = TRue.System.Web.Mvc在我的本地机器和构建服务器上都在GAC中.
我还有一个"项目B",在"项目B"System.Web.Mvc的输出中引用"项目A",在构建期间不会复制到该项目.
我怀疑这是因为它在GAC中.这是真的?我可以做些什么来让MSBuild将它复制到输出文件夹吗?
我在这个帖子中读到了Muse VsExtensions的答案,它只讨论了对GAC的直接引用,但我们通过"项目A"间接引用: .NET参考"复制本地"真/假根据内容设置GAC
这篇博文也是相关的:http: //deeperdesign.wordpress.com/2010/02/08/msbuild-assembly-dependencies-and-the-gac/
您是否检查.csproj文件以验证引用确实包含<Private>True</Private>标记?不幸的是,复制本地在xml中有3个状态 - True,False和......缺失.
我看到的一项针对此问题的建议是将所有项目更改为具有相同的输出路径。但这的价值有限,因为如果您有一个依赖链,例如: Prj B > Prj A > Lib C 那么这可能是因为 Prj A 在多个应用程序之间共享,您将希望每个应用程序都有自己的输出路径。
我通过使用 MSBuild 进行编译并在每个构建上设置 OutDir 属性解决了该问题。
例如MSBuild projectB.csproj /p:OutDir=C:\AppBOutput\
这会将项目 B 的输出、其依赖项目 (prj A) 和 prj As 复制本地依赖项全部放入 C:\AppBOutput\ 目录中。
在 Visual Studio 中构建项目时,prj A 和 prj B 都有自己的输出目录,例如prjA\bin\debug和prjB\bin\debug。设置为 copylocal 的 GAC 存储程序集将包含在直接引用它的项目 (prjA) 的输出目录中。但它不会被复制到引用该项目 (prjB) 的项目的输出目录。这就是项目参考复制的工作原理。深入研究 MSBuild 目标,我确信可以找到根本原因(抱歉,我自己没有这样做)。
MSBuild 参数的作用/p:OutDir=C:\AppBOutput\是将所有项目的输出目录设置为相同。通过这样做,您可以避开 MSBuild 复制项目到项目参考输出的行为。您不必依赖 MSBuild 将某些内容复制到 中prjA\bin\debug,prjB\bin\debug只需强制所有项目输出到同一目录即可。
| 归档时间: |
|
| 查看次数: |
3395 次 |
| 最近记录: |