【发布时间】:2013-10-18 12:16:30
【问题描述】:
我有一个第三方库,它由我的核心项目中引用的两个程序集组成。 其中一个程序集是从我的 Core 项目中的代码静态引用的,另一个仅在 web 项目的 web.config 中使用。反过来,核心项目是从 Web 项目中引用的。
问题是当我启动 Web 应用程序时应用程序崩溃,因为缺少第二个程序集,无法解析 web.config。我猜编译器无法理解 Core 项目应该包含第二个程序集,因为它通过 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"));
}
}
【问题讨论】:
-
这是在 Connect 上。 Status: Closed as Won't Fix,解决方法:构建后步骤。
-
如果构建事件意味着用魔术字符串编写复制代码,我的上述解决方案必须考虑更清洁?
-
@Anders 你的解决方案检查是否存在,postbuildevents 只复制它们。我认为您应该同时使用两者或将该引用添加到您的项目中并停止担心耦合
-
我的解决方案无需使用复制。所以,如果你不想使用魔法字符串并 copt 或者不想从宿主项目中引用它,我的解决方案是最好的
标签: c# .net visual-studio-2012 assemblies