【发布时间】:2010-11-11 01:27:27
【问题描述】:
我的 Visual Studio 解决方案中有四个项目(每个人都针对 .NET 3.5) - 对于我的问题,只有这两个很重要:
- MyBaseProject
- MyWebProject1
我在 Visual Studio 2008 中添加了对 MyBaseProject 的 elmah.dll 引用,方法是单击“添加引用...”→“浏览”选项卡→选择“elmah.dll”。
Elmah 引用的属性如下:
- 别名 - 全局
- 复制本地 - 真
- 文化-
- 描述 - 用于 ASP.NET 的错误记录模块和处理程序 (ELMAH)
- 文件类型 - 程序集
- 路径 - D:\webs\otherfolder\_myPath\__tools\elmah\Elmah.dll
- 已解决 - 是的
- 运行时版本 - v2.0.50727
- 指定版本 - 错误
- 强名称 - 错误
- 版本 - 1.0.11211.0
在 MyWebProject1 中,我通过以下方式添加了对 Project MyBaseProject 的引用: “添加参考...”→“项目”选项卡→选择“MyBaseProject”。除了以下成员之外,此引用的属性相同:
- 说明 -
- 路径 - D:\webs\CMS\MyBaseProject\bin\Debug\MyBaseProject.dll
- 版本 - 1.0.0.0
如果我在 Visual Studio 中运行构建,elmah.dll 文件将与 MyBaseProject.dll 一起复制到我的 MyWebProject1 的 bin 目录中!
但是,如果我为解决方案清理并运行 MSBuild(通过 D:\webs\CMS> C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /t:重建 /p:Configuration=Debug MyProject.sln) MyWebProject1 的 bin 目录中的 elmah.dll 丢失 - 尽管构建本身不包含警告或错误!
我已经确保 MyBaseProject 的 .csproj 包含值为“true”的 private 元素(这应该是 Visual 中“copy local”的别名工作室):
<Reference Include="Elmah, Version=1.0.11211.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\mypath\__tools\elmah\Elmah.dll</HintPath>
**<Private>true</Private>**
</Reference>
(默认情况下,私有标签没有出现在 .csproj 的 xml 中,尽管 Visual Studio 说“复制本地”为真。我将“复制本地”切换为假 - 已保存 - 并再次将其设置回真 - 保存! )
MSBuild 出了什么问题?如何将 (elmah.dll) 引用复制到 MyWebProject1 的 bin?
我不想在每个项目的 postbuild 命令中添加 postbuild 复制操作! (想象一下我会有很多项目依赖于 MyBaseProject!)
【问题讨论】:
-
我很想知道为什么会发生这种情况。
-
看看here提供的答案
-
任何带有完整源代码示例的最终解决方案?
-
请参阅下面@deadlydog 的答案stackoverflow.com/a/21055664/21579。很好的解释并为我解决了这个问题......下面投票最多的答案对于 VS2012 是不正确的。
标签: visual-studio msbuild reference dependencies project