我的 Visual Studio 解决方案中有四个项目(每个人都针对 .NET 3.5) - 对于我的问题,只有这两个很重要:
- MyBaseProject <- 此类库引用第三方 DLL 文件 (elmah.dll)
- MyWebProject1 <- 此 Web 应用程序项目有对 MyBaseProject 的引用
通过单击“添加引用...”→“浏览”选项卡→选择“elmah.dll”,我在 Visual Studio 2008 中添加了对MyBaseProject的 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:ReBuild /p:Configuration=Debug MyProject.sln ) MyWebProject1 的 bin 目录中缺少elmah.dll - 尽管构建本身不包含警告或错误!
我已经确保 MyBaseProject 的 .csproj 包含值为“true”的私有元素(这应该是Visual Studio中“复制本地”的别名):
<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!)