【问题标题】:References .NET参考 .NET
【发布时间】:2015-02-20 10:49:16
【问题描述】:

我有一个项目 (A) 将开发一个记录器系统。该项目将用于其他项目。在项目 A 中,有两个引用在编译时没有使用。

当我在任何项目中添加对项目 A 的引用时,不会导入这些引用,但我在运行时需要它们。

我见过两种解决方案:

a) 使用虚拟代码在编译时强制复制。这个解决方案似乎不够优雅。

b) 在其他项目中添加引用。此解决方案强制始终引用 DLL

有没有办法强制复制引用?

非常感谢

【问题讨论】:

  • 在构建操作后使用 Visual Studio 编译器将 dll 复制到运行时或 dll 目录是另一种解决方案。例如,这是使用棱镜时的常见做法。它显示低耦合
  • 您只需要复制文件。您可以使用 Project + Add Existing Item 将它们简单地添加到您的项目中,并将它们的 Copy to Output Directory 属性设置为“Copy if newer”。如果您不喜欢混乱,那么在构建后事件中使用 XCOPY /d 也可以。
  • 抱歉,在其他项目中添加 dll 作为参考有什么问题?
  • 问题是关于知识的。如果我引用程序集 A,在从项目 B 中引用它时,我是否需要知道其他程序集 A 需要什么才能起作用?如果我已将应用程序分层为数据访问、业务逻辑、用户界面,为什么我需要为我的用户界面层添加引用以确保包含我的数据访问层所需的所有必要程序集?为什么我什至想要?我应该只需要添加对我的业务逻辑层的引用,并自动带来依赖关系。

标签: c# .net dll reference


【解决方案1】:

尝试在Project A中更改指定引用的Copy Local属性

编辑作为这种情况的解决方案:

如果您没有在编译时使用这些引用,那么您应该 添加特定的 dll 文件(添加现有项),作为 Build 中的内容 操作,并使用“始终复制”选项(在项目 A 中)。当项目 A 得到构建,这些文件将成为构建输出。这样你就可以 访问引用项目 A 的其他项目的文件

【讨论】:

  • Copy Local为真,在A项目的bin中生成,但在B项目中没有出现
  • 如果您在编译时没有使用这些引用,那么您应该添加特定的 dll 文件(添加现有项),作为构建操作中的内容,并使用始终复制选项(在项目 A 中)。当项目 A 构建时,这些文件将成为构建输出。这样您就可以从引用项目 A 的其他项目中访问文件
  • Naumand,这是一个很好的解决方案!!我可以将其添加为现有项目。谢谢!
【解决方案2】:

考虑为您的项目制作一个NuGet 包。 NuGet 包可以提供运行时所需的库并将它们添加到目标项目中(尽管我认为您可能需要使用 PowerShell 脚本来执行此操作)。

然后,您可以在目标项目中使用“管理 NuGet 引用”来添加“项目 A”,并让 NuGet 安装脚本添加“仅运行时”库引用”

请记住,您可以在内部托管自己的 NuGet 包,它们不需要发布到在线库。我们将这种方法用于内部共享项目,因为它使依赖项管理和版本控制非常简单和明智,并且在源代码控制方面保持每个项目的严格范围。

【讨论】:

    【解决方案3】:

    您可以使用反射在运行时加载程序集:

     Assembly assembly = Assembly.LoadFile(path);
    
     Type t = assembly.GetType("YourClassName");
    
     object instance = Activator.CreateInstance(t);
    
     int parameter1 = 1;
    
     object result = t.GetMethod("The MethodName").Invoke(instance, new object[] { parameter1, "Something" });
    

    虽然有点麻烦。

    【讨论】:

      【解决方案4】:

      也许尝试解决问题的根源 - 为什么不添加对实际使用它们的项目的引用?

      【讨论】:

        猜你喜欢
        • 2017-09-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-18
        • 2023-03-27
        • 2017-04-25
        • 2018-01-08
        相关资源
        最近更新 更多