2013-10-18 62 views
0

我有一个第三方库,由我的Core项目中引用的两个程序集组成。 其中一个程序集是从我的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'"); 
    } 

它的一个黑客位,但好处是,它仅影响核心项目这是唯一应该了解这个第三方lib的项目。 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")); 
    } 
} 
+0

postbuildevents? – giammin

+2

这是连接。 [Status:Closed as Will not Fix](http://connect.microsoft.com/VisualStudio/feedback/details/652785/visual-studio-does-not-copy-referenced-assemblies-through-the-reference-hierarchy ),解决方法:后期构建步骤。 – CodeCaster

+0

如果构建事件意味着用魔法字符串编写复制代码,我的上述解决方案必须考虑更清洁吗? – Anders

回答

0

因为DLL是不是在bin目录中很可能失败。 尝试将ThirdPartyClass.dll添加到项目中,然后将其设置为“始终复制”。 希望对您有所帮助

+0

这不会工作,因为CodeCaster提到的bug – Anders