在我的Visual Studio解决方案中,我有四个项目(每个项目都针对。net 3.5)——对于我的问题,只有这两个是重要的:

这个类库引用了一个第三方DLL文件(elma . DLL) 这个web应用程序项目有一个对MyBaseProject的引用

我通过点击“添加引用…”将elmah.dll引用添加到Visual studio 2008中的MyBaseProject中。→“浏览”选项卡→选择“elmah.dll”。

Elmah Reference的属性如下:

别名-全局 本地复制- true 文化- - - - - - 错误日志模块和处理程序(ELMAH)。网 文件类型-程序集 路径- D:\webs\otherfolder\_myPath\__tools\elmah\ elmah .dll 解决-正确 运行时版本- v2.0.50727 指定版本- false 强名称- false 版本- 1.0.11211.0

在MyWebProject1中,我通过以下方式添加了对项目MyBaseProject的引用: “添加引用……”→“项目”标签→选择“MyBaseProject”。除了以下成员之外,该引用的属性是相同的:

描述- - - 路径- D:\web \CMS\MyBaseProject\bin\Debug\MyBaseProject.dll 版本- 1.0.0.0

如果我在Visual Studio中运行构建,elmah.dll文件将被复制到我的MyWebProject1的bin目录中,以及MyBaseProject.dll!

但是,如果我清理并运行解决方案的MSBuild(通过D:\web \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中"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说“copy local”为真。我切换“复制本地”为假-保存-并将其设置为真-保存!)

MSBuild有什么问题?我如何得到(elmah.dll)引用复制到MyWebProject1的bin?

我不想在每个项目的postbuild命令中添加一个postbuild复制操作!(假设我有许多项目依赖MyBaseProject!)


当前回答

我就是这样处理的。转到你引用的属性,这样做:

Set "Copy local = false"
Save
Set "Copy local = true"
Save

就是这样。

Visual Studio 2010最初并没有: <private>True</private>在引用标签中,并将“copy local”设置为false会导致它创建标签。然后,它将相应地将其设置为true和false。

其他回答

这需要将.targets文件添加到项目中,并将其设置为包含在项目的includes部分中。

请看我在这里回答的程序。

我就是这样处理的。转到你引用的属性,这样做:

Set "Copy local = false"
Save
Set "Copy local = true"
Save

就是这样。

Visual Studio 2010最初并没有: <private>True</private>在引用标签中,并将“copy local”设置为false会导致它创建标签。然后,它将相应地将其设置为true和false。

我面临的问题是我有一个依赖于图书馆项目的项目。为了制作游戏,我遵循了以下步骤:

msbuild.exe myproject.vbproj /T:Rebuild
msbuild.exe myproject.vbproj /T:Package

这当然意味着我在bin中丢失了我的库的dll文件,最重要的是在包zip文件中。我发现这非常有效:

msbuild.exe myproject.vbproj /T:Rebuild;Package

我不知道为什么它会起作用,也不知道为什么它一开始就不起作用。但希望这能有所帮助。

如果你没有在代码中直接使用程序集,那么Visual Studio会检测到它没有被使用,并且不会在输出中包含它。我不知道为什么你看到Visual Studio和MSBuild之间有不同的行为。您可以尝试将构建输出设置为诊断输出,并比较结果,看看它在哪里出现分歧。

至于你的elma .dll引用,如果你没有在代码中直接引用它,你可以将它作为一个项目添加到你的项目中,并将构建操作设置为内容,将复制到输出目录设置为始终。

使用Visual Studio 2015添加附加参数

/ deployonbuild = false

到msbuild命令行修复了该问题。