【发布时间】:2019-04-28 19:56:56
【问题描述】:
我的目标是在保持所需布局的同时防止重复。
所以,我有一个项目(C#/.Net462/VS15-2017),它引用了一些第三方 DLL。出于原因,我发现最好将这些文件与我的应用程序一起打包,并使用指令引用 app.config 中的文件。
出于更多原因,我决定将这些程序集(.dll 文件)作为内容放入我的项目中,以便更新时复制。 p>
项目布局如下所示:
SexyApp <-project
References
third.party.dll
Images <-fluff
sexy.png
Lib <-folder
x86Arch <-folder
third.party.dll <-third party assembly (content, copy when newer)
ru <-localized folder
third.party.resource.dll <-resource assembly (content, copy when newer)
app.config
sexy.cs
发布输出看起来像这样
bin
Release
sexy.exe
sexy.config
Images
sexy.png
third.party.dll <-This seems like a duplicate
ru <-This seems like a duplicate
third.party.resource.dll <-This seems like a duplicate
Lib <-This is what I want
x86Arch <-This is what I want
third.party.dll <-This is what I want
ru <-This is what I want
third.party.resource.dll <-This is what I want
期望的输出
bin
Release
sexy.exe
sexy.config
Images
sexy.png
Lib <-This is what I want
x86Arch <-This is what I want
third.party.dll <-This is what I want
ru <-This is what I want
third.party.resource.dll <-This is what I want
我的尝试
- 构建操作无,更新时复制。仍然复制文件。
- 构建动作内容,请勿复制。将它们复制到错误的位置。
- DLL 的引用已将本地复制设置为 true。将此设置为 false 不会改变结果。
编辑: 构建路径只是 'bin\Release\' 对 x86 的引用是一个文件夹……第三方程序集的 x86 版本。
【问题讨论】:
-
x86 文件夹在哪里?我没有在 Release 输出和 Desired 输出中看到它。
third.party.dll文件在引用节点下和x86文件夹下是同一个文件吗?您是如何获得这些重复文件的,您是在构建之前清理解决方案还是进行任何其他操作?无法根据您的项目布局重现此问题。如果可能,请与我们分享一个小样本,以便我们重现此问题。 -
MSBuild 使用
None和Content项目作为ResolveAssemblyReferences任务的输入,因此如果您引用程序集,它也可能会找到这些项目。您也可以在Content项目上设置Private="false",但如果没有可重现的示例和/或 .csproj 文件,我们可能无法为您提供更多帮助。 -
抱歉,还是无法重现这个问题,release文件夹下的重复文件
third.party.dll,可以将引用copy local设置为false。但是ru文件夹下的重复文件third.party.resource.dll,我无法重现,我身边没有。您真的应该与我们分享一个可重现的示例样本。 -
这是我发现的以及我如何解决它的。无论我设置什么,它都会复制参考。而且,该软件确实需要这些 dll。但是,我也在复制它们,所以不需要复制它们。我编辑了 csproj 文件,为我想要的 dll 添加了 TARGET COPY SOURCEFILES。然后我在之前的构建空间中做了,仍然将它们复制到一个子目录。然后,MSBuild 停止复制它们(不确定它是否仍然无视设置/建议)。我的收获是,如果它知道它们是需要的,并且不知道它们是以另一种方式被复制的,它可能会复制它们。
-
还注意到该项目的目标是 .Net 4.6.2,但 MSBuild 日志显示它使用 4.6.1 工具和 4.6.2 工具。这可能是相关的,也可能是一些看不见的魔法。它专门使用 4.6.1 resgen。我希望能够提供样品。这个解决方案有二十几个项目。我想我会有一个远程的人,我可以用其他我还没有移动到子文件夹的 dll 来演示。不确定我是否可以提供一个简单的例子。无论如何,感谢您的回复和欢呼!
标签: visual-studio deployment msbuild visual-studio-2017 project