我有一个包含多个项目的解决方案,所有项目都输出dll(当然主要应用程序除外)。对于所有引用,将local local设置为true,并且与exe在同一目录中的dll一切都很好并且花花公子。
我的问题是这很难看。我想将所有dll放在子文件夹中(实际上是两个子文件夹)。我如何在Visual Studio 2008中执行此操作?
我发现了一些看似相似的问题,但我找不到我知道的简单答案。
编辑:为了更清楚,我想知道如何使程序集加载器在操作目录之外的某处查找引用。用户将与目录中的一些其他文件进行交互,并且对他们的影响就越小。
编辑2:我也想避免使用GAC。应用程序需要自包含。
答案 0 :(得分:4)
您是否尝试过AppDomain命名空间?
AppDomain.CurrentDomain.AppendPrivatePath
答案 1 :(得分:2)
或AssemblyResolve
public static class AssemblyResolver {
static AssemblyResolver() {
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(delegate(object sender, ResolveEventArgs args) {
return Assembly.LoadFrom(...);
});
}
}
答案 2 :(得分:1)
使用app.config <probing>
元素指示.NET运行时查找子文件夹以查找其他程序集。请参阅here。
答案 3 :(得分:0)
您不能将这些引用放在子文件夹中。因为它们不会被应用程序的运行时“看到”。
放置它们的第一个位置是调试目录,然后是全局程序集缓存(又称GAC)。请注意,您在Add Reference
对话框中的(.Net)选项卡中看到的实际上是GAC目录中的引用。
注意:如果您使用TFS作为后端源代码控制,请注意,在执行签入时,引用不会复制到源代码控制存储库,而是必须手动复制它们。
答案 4 :(得分:0)
我只是发表了一篇文章,详细说明了所有这些内容。 Partitioning Your Code Base Through .NET Assemblies and Visual Studio Project
以下是本文的最终指导原则: