1. MyBaseProject <- 这个类库引用了第三方DLL文件(elmah.dll) 2. MyWebProject1 <- 这个Web应用程序项目引用了MyBaseProject
我通过点击 "添加引用..." -> "浏览"选项卡 -> 选择"elmah.dll" 在 Visual Studio 2008 中将 elmah.dll 引用添加到 MyBaseProject。Elmah 引用的属性如下:
- 别名 - 全局 - 复制本地 - true - 文化 - - 描述 - 用于 ASP.NET 的错误日志记录模块和处理程序 (ELMAH) - 文件类型 - 程序集 - 路径 - D:\webs\otherfolder\_myPath__tools\elmah\Elmah.dll - 已解析 - True - 运行时版本 - v2.0.50727 - 指定版本 - false - 强名称 - false - 版本 - 1.0.11211.0
在 MyWebProject1 中,我通过 "添加引用..." -> "项目"选项卡 -> 选择"MyBaseProject" 来添加对 MyBaseProject 项目的引用。该引用的属性与上述相同,除了以下成员:
- 描述 - - 路径 - D:\webs\CMS\MyBaseProject\bin\Debug\MyBaseProject.dll - 版本 - 1.0.0.0
如果我在 Visual Studio 中运行构建,则 elmah.dll 文件将与MyBaseProject.dll一起复制到 MyWebProject1 的bin目录中!但是,如果我清理并通过 D:\webs\CMS> C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /t:ReBuild /p:Configuration=Debug MyProject.sln 来运行解决方案的 MSBuild,则在MyWebProject1的bin目录中缺少 elmah.dll——尽管构建本身没有警告或错误!
我已经确保 MyBaseProject 的 .csproj 包含具有值 "true" 的 private 元素 (这应该是 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显示“复制本地”为true。我将“复制本地”设置为false,保存,然后再设置为true - 保存! MSBuild出了什么问题?如何才能让(elmah.dll)引用被复制到MyWebProject1的bin目录下?我不想在每个项目的后期构建命令中添加复制操作!(想象一下,如果有很多项目依赖于MyBaseProject!)