Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将C#项目引用放置在子文件夹中_C#_Visual Studio 2008_Dll_Dependencies - Fatal编程技术网

将C#项目引用放置在子文件夹中

将C#项目引用放置在子文件夹中,c#,visual-studio-2008,dll,dependencies,C#,Visual Studio 2008,Dll,Dependencies,我有一个包含多个项目的解决方案,所有项目都输出DLL(当然除了主应用程序)。对于所有引用,Copy local都设置为true,如果DLL与exe位于同一目录中,则一切正常 我的问题是这很难看。我想把所有的dll放在一个子文件夹中(确切地说是两个子文件夹)。如何在VisualStudio2008中执行此操作 我发现了一些似乎相似的问题,但我找不到我知道必须存在的简单答案 编辑:为了更清楚,我想知道如何使程序集加载器在操作目录之外的某处查找引用。用户将与目录中的一些其他文件进行交互,对他们来说,混

我有一个包含多个项目的解决方案,所有项目都输出DLL(当然除了主应用程序)。对于所有引用,Copy local都设置为true,如果DLL与exe位于同一目录中,则一切正常

我的问题是这很难看。我想把所有的dll放在一个子文件夹中(确切地说是两个子文件夹)。如何在VisualStudio2008中执行此操作

我发现了一些似乎相似的问题,但我找不到我知道必须存在的简单答案

编辑:为了更清楚,我想知道如何使程序集加载器在操作目录之外的某处查找引用。用户将与目录中的一些其他文件进行交互,对他们来说,混乱越少越好


编辑2:我还想避免使用GAC。应用程序需要是自包含的。

不能将这些引用放在子文件夹中。因为它们不会被应用程序的运行时“看到”

首先将它们放在调试目录中,然后放在全局程序集缓存(也称为GAC)中。请注意,
addreference
对话框中的(.Net)选项卡中显示的实际上是GAC目录中的引用


注意:如果使用TFS作为后端源代码管理,请注意,执行签入时引用不会复制到源代码管理存储库,而必须手动复制它们。

是否尝试过AppDomain命名空间

AppDomain.CurrentDomain.AppendPrivatePath


AssemblyResolve

public static class AssemblyResolver { 
    static AssemblyResolver() { 
        AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(delegate(object sender,  ResolveEventArgs args) {
            return Assembly.LoadFrom(...); 
        }); 
    }  
} 

我刚刚发表了一篇文章,详细解释了所有这些。

以下是本文的指导方针:

  • 大幅减少代码库的程序集数量
  • 仅当物理分离的特定要求证明了这一点时,才创建新部件
  • 在Visual Studio项目中,请使用“程序集引用”而不是“Visual Studio项目引用”
  • 永远不要使用Visual Studio引用选项“Copy Local=True”
  • 将所有VS解决方案和Build action.bat文件放在$rootDir$目录中
  • 编译目录中的所有程序集:$rootDir$\bin\Debug和$rootDir$\bin\Release
  • 使用目录$rootDir$\bin托管测试程序集
使用app.config
元素指示.NET运行时在子文件夹中查找其他程序集。请参阅。

但如何加载它们?您必须手动加载每个DLL,这太糟糕了。如果你这样做了,你就不能引用项目——你不能简单地使用项目中的类型。完全是杀伤力过大和大脑爆炸。理想情况下,VS中有某种方法可以让应用程序在操作目录之外的某个地方查找所有依赖项。我想象不出有那么难。只有一个问题——VisualStudio警告说它已被弃用。关于使用新的替代方案有什么建议吗?目前,应用程序正在运行,实际上这是一种不推荐的方式:)