我的目标是在保持所需布局的同时防止重复。
因此,我有一个引用某些第三方DLL的项目( C#/。Net462 / VS15-2017 )。对于原因,我发现最好将这些文件与我的应用程序打包在一起,并使用指令在app.config中引用这些文件。
出于更多原因,我决定将这些程序集(.dll文件)作为内容放入我的项目中,该内容在更新时会复制。>
项目布局如下所示:
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
我尝试过的事情
编辑: 构建路径只是“ bin \ Release \” 对x86的引用是一个文件夹...第三方程序集的x86版本。
答案 0 :(得分:0)
在项目文件中,将有对third.party.dll的引用以及其内容条目。内容条目就是将其复制到所需子目录的内容。在VS中,将其设置为“ copy local false”,或在记事本中编辑项目文件,然后将false设置为参考。
<Content Include="third.party.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Reference Include="third.party.dll">
<Private>false</Private>
</Reference>
即使您说您已尝试将本地副本设置为false,但我知道它也会兑现。对于无论如何都会出现的文件,我都建议您使用另一个引用“ third.party.dll”的组件,并将其设置为本地复制,以便将“ third.party.dll”引入输出的根目录目录。
顺便说一句,通过将第三方程序集放在子文件夹中,您正在与msbuild和.net的默认行为作斗争。您的应用程序将需要一个配置文件,其中设置了您需要维护的探测路径,否则它将无法正常工作。然后,如果其他人添加了一个依赖于“ third.party.dll”的组件,那么您将回到试图从bin文件夹中入侵该组件的位置。除非您有令人信服的理由使用子文件夹,否则请不要这样做-没有它,这是令人头痛的生活。
答案 1 :(得分:0)
我认为您正在尝试解决错误的问题。
您所要做的就是与msbuild的默认行为作斗争,并为应用程序增加不必要的复杂性。
放置在子文件夹中的任何文件都需要在配置文件中具有相应的探针路径条目。您将必须维护该位置,以便对其他文件夹进行任何更改都将产生额外的维护开销。这将阻碍单元测试和集成测试的自动化测试。
此外,您将需要付出更多的努力来抑制多个目录中存在同一程序集。今后将需要对其进行管理和维护,这将使您反复绊倒。
如果您只接受bin文件夹作为所有程序集的存放位置,并且不试图干扰它,那么这就是您可以消除的所有开销。
请从刚因为您遇到的所有问题而做了相反工作的人那里拿走它。