写。提议的欺骗:由于这里的问题与链接的问题相反,我宁愿认为它不是欺骗。
首先,我确实阅读了“复制本地”和项目参考的最佳实践是什么?(也是这个),无论如何我都必须尝试一下,但是获得关于这个的一般反馈似乎是必要的,因为关于这些东西的文档太可怕了,我只在 VS2010 上,也许他们在更新的版本中改变了一些东西很高兴知道。
其次,我只对这个问题的项目参考感兴趣,因为我读到 GAC 的程序集处理方式不同,而 GAC 与我的问题无关。
第三,在阅读了建议的欺骗之后,但更多的是@Albireo 的好答案,区分文件依赖项似乎也很重要,其中依赖项引用 dll 程序集文件和项目依赖项(即我在问什么about),其中依赖项引用一个项目并隐含该项目的输出文件。
无论如何,这里的情况,我觉得有点奇怪,但仍然:
- 2 个 C# 可执行项目
- n C# dll 汇编项目
- 这两个可执行文件具有不同的输出目录,因为它们将单独部署,这样它们在开发人员机器上也是独立的
- 2 个可执行文件依赖于某些 DLL 程序集(它们可能相互依赖)
- 有三个输出目录:
/x1
对于可执行 1 项目/x2
对于可执行 2 项目/lib
对于所有 dll 程序集
DLL 程序集都已设置Copy Local
为false
它们的项目引用,因为它们都构建到相同的输出目录。
2 个可执行项目已将它们直接引用的所有 DLL 程序集项目引用设置Copy Local
为true
,以便将 DLL/x1
/x2
分别复制到其中。
现在的问题是wrt。到可执行项目不直接引用但仅通过引用的程序集传递的DLL :将仅通过另一个程序集传递引用的程序集复制到可执行文件的输出文件夹中,当“复制本地”设置为在第一次大会上是真的吗?
例子:
x1.csproj
(例如输出 =x1/one.exe
)- 参考:(
dlA.csproj
例如输出=lib/a.dll
)与Copy Local = *true*
- (没有直接引用 b.dll)
- 参考:(
dlA.csproj
(例如输出=lib/a.dll
)- 参考:(
dlB.csproj
例如输出=lib/b.dll
)与Copy Local = **false**
- (没有直接引用 c.dll)
- 参考:(
dlC.csproj
(例如输出=lib/c.dll
)- (没有进一步的相关参考)
因此,我们有一个逻辑依赖关系one.exe -> a.dll -> b.dll -> c.dll
,其中只有a.dll
很明显被复制到的输出目录one.exe
。另外两个dll也会被复制到输出目录吗? 这是在某处记录的吗?
而且,是的,我试过了。而且,是的,它似乎有效,但我还没有足够努力地戳它,无论如何,我可能错过了更多的东西。(还有一个问题。任何官方文档。)