【问题标题】:How can I reference a dll without any public members?如何在没有任何公共成员的情况下引用 dll?
【发布时间】:2023-04-01 21:50:01
【问题描述】:

我正在开发一个集成测试工具,它使开发人员能够针对我们的集成数据库或 SQLite 内存数据库执行方法。

因为我的工具没有引用任何实际的 SQLite 代码,所以我必须添加虚拟代码以确保 msbuild 复制 DLL:

namespace References {
    internal interface IReferenceUnusedDependencies {
        SQLiteException e { set; } // Reference System.Data.SQLite.dll
        IMappingEngineRunner r { set; } // Reference AutoMapper.dll
    }
}

但是,我不知道如何引用 System.Data.SQLite.Linq.dll 的代码 - 它包含的所有类和接口都是内部的。

是否有可能以某种方式进行这些引用?

【问题讨论】:

  • 只需将引用标记为“始终复制”,它与公共/私人成员无关。
  • 我在哪里标记参考“总是复制”?
  • @WiktorZychla - 所以不是将其添加为参考,而是将其添加为项目根目录下的Content 类型文件?请添加一个答案,我会接受它。

标签: c# sqlite assembly-references


【解决方案1】:

将此程序集属性添加到您的主项目

using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo( "MyTestDLLName" )]

重新阅读问题,您只需将引用的程序集复制到您的bin吗?

如果是这样,您可以在解决方案资源管理器的项目属性下选择 Visual Studio(反过来使用 MSBuild)中的复制到属性。

在 References 文件夹中选择引用,然后选择复制本地。 (其他 MSBuild 属性也可用)

【讨论】:

  • System.Data.SQLite.Linq?
  • 但这不只适用于您的程序集吗?如果是第三方程序集怎么办?同样的交易?
  • @JeffMercado 是的,这是针对您想要明确访问内部的外部程序集
  • @arootbeer 这适用于任何具有您想让外部程序集可见的内部结构的程序集
  • 好的,但是如果是第三方程序集怎么办​​?您不能随意将属性应用于任何程序集,如果它不是您的代码,您将无能为力(AFAIK)。
猜你喜欢
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
相关资源
最近更新 更多