我有一个第三方库,它由我的核心项目中引用的两个程序集组成。其中一个程序集是从我的 Core 项目中的代码静态引用的,另一个仅在 web 项目的 web.config 中使用。反过来,核心项目是从 Web 项目中引用的。
问题是当我启动 Web 应用程序时应用程序崩溃,因为缺少第二个程序集,无法解析 web.config。我猜编译器无法理解核心项目应该包含第二个程序集,因为它通过 web.config 松散地链接。
我不想将程序集添加到 Web 项目中,因为这将是紧密耦合的,它不是依赖于程序集的 Web 项目,而是核心项目。
我这样做解决了它(在使用第三方程序集的核心项目类中):
static MyClass()
{
var dummy = typeof(ThirdPartyClass);
if (dummy == null)
throw new Exception("Do not remove reference to 'ThirdPartyClass'");
}
它有点 hack,但好的是它只影响 Core 项目,这是唯一应该了解这个第三方库的项目。这throw new Exception
是为其他开发人员准备的,以便他们了解他们无法删除它,而且它会处理未使用的警告。
我的问题,这是一个很好的有效解决方案,还是有更好的解决方案?
编辑:做了一个小助手类
public static class Util
{
public static void EnsureStaticReference<T>()
{
var dummy = typeof(T);
if(dummy == null)
throw new Exception(string.Format("This code is used to ensure that the compiler will include assembly"));
}
}