【问题标题】:Placing C# Project References in a Subfolder将 C# 项目引用放在子文件夹中
【发布时间】:2011-06-24 01:42:06
【问题描述】:

我有一个包含多个项目的解决方案,所有项目都输出 dll(当然主要应用程序除外)。所有引用的本地复制都设置为 true,并且 dll 与 exe 位于同一目录中,一切都很好。

我的问题是这很难看。我想将所有 dll 放在一个子文件夹中(准确地说,实际上是两个子文件夹)。如何在 Visual Studio 2008 中执行此操作?

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

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

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

【问题讨论】:

  • 但是如何加载它们呢?您将不得不手动加载每个 DLL,这很糟糕。如果你这样做了,你就不会引用这些项目——你不能简单地使用它们中的类型。完全过度杀伤和大脑爆炸。
  • 理想情况下,VS 中有一些方法可以让应用程序在操作目录之外的某个位置查找所有依赖项。我无法想象这有那么难。

标签: c# visual-studio-2008 dll dependencies


【解决方案1】:

您尝试过 AppDomain 命名空间吗?

AppDomain.CurrentDomain.AppendPrivatePath

http://www.vcskicks.com/csharp_assembly.php

【讨论】:

  • 只有一个问题 - Visual Studio 警告它已被弃用。关于使用较新的替代方案有什么建议吗?就目前而言,应用程序运行良好
【解决方案2】:

AssemblyResolve

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

【讨论】:

  • 啊实际上这是不推荐使用的方法:)
【解决方案3】:

使用 app.config <probing>element 指示 .NET 运行时在子文件夹中查找其他程序集。见here

【讨论】:

    【解决方案4】:

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

    首先将它们放在调试目录中,然后放在全局程序集缓存(又名 GAC)中。请注意,您在Add Reference 对话框的 (.Net) 选项卡中看到的实际上是 GAC 目录中的引用。

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

    【讨论】:

      【解决方案5】:

      我刚刚发布了一篇详细解释所有这些的文章。 Partitioning Your Code Base Through .NET Assemblies and Visual Studio Project

      以下是文章的最终指南:

      • 大幅减少代码库的程序集数量。
      • 仅当物理分离的特定要求证明这是合理的时才创建新的程序集。
      • 在 Visual Studio 项目中,使用“程序集引用”而不是“Visual Studio 项目引用”。
      • 切勿使用 Visual Studio 引用选项“Copy Local = True”。
      • 将所有 VS 解决方案和构建操作 .bat 文件放在 $rootDir$ 目录中。
      • 编译目录中的所有程序集:$rootDir$\bin\Debug 和 $rootDir$\bin\Release
      • 使用目录 $rootDir$\bin 来托管测试程序集。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-27
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 1970-01-01
        • 2019-10-13
        • 1970-01-01
        相关资源
        最近更新 更多