我的 Visual Studio 解决方案中有四个项目(每个项目都针对 .NET 3.5) - 对于我的问题,只有这两个项目很重要:
- MyBaseProject <- 该类库引用第三方 DLL 文件 (elmah.dll)
- MyWebProject1 <- 此 Web 应用程序项目引用了 MyBaseProject
我通过单击“添加引用...”→“浏览”选项卡→选择“elmah.dll”,将 elmah.dll 引用添加到 Visual studio 2008 中的 MyBaseProject。
Elmah 引用的属性如下:
- 别名 - 全局
- 复制本地 - true
- 文化 -
- 说明 - ASP.NET 的错误日志记录模块和处理程序 (ELMAH)
- 文件类型 - 程序集
- 路径 - D:\webs\otherfolder\_myPath\__tools\elmah\Elmah.dll
- 已解决 - 正确
- 运行时版本 - v2.0.50727
- 指定版本 - false
- 强名称 - false
- 版本 - 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=调试 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>
(默认情况下,私有(private)标记不会出现在 .csproj 的 xml 中,尽管 Visual Studio 表示“复制本地”为 true。我将“复制本地”切换为 false - 已保存 - 并再次将其设置回 true - 保存! )
MSBuild 有什么问题?如何将 (elmah.dll) 引用复制到 MyWebProject1 的 bin 中?
我不想向每个项目的构建后命令添加构建后复制操作! (想象一下我会有很多项目依赖于 MyBaseProject!)
最佳答案
我就是这样处理的。转到引用的属性并执行以下操作:
Set "Copy local = false"
Save
Set "Copy local = true"
Save
就是这样。
Visual Studio 2010 最初并未放置:
<private>True</private>
在引用标签中并将“copy local”设置为 false 会导致它创建标签。然后它会相应地将其设置为 true 和 false。
关于visual-studio - 如果在解决方案中使用项目依赖项,MSBuild 不会复制引用(DLL 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1132243/