Core プロジェクトで参照される 2 つのアセンブリで構成されるサード パーティ ライブラリがあります。アセンブリの 1 つはコア プロジェクトのコードから静的に参照され、もう 1 つは Web プロジェクトの web.config でのみ使用されます。コア プロジェクトは、Web プロジェクトから参照されます。
問題は、2 番目のアセンブリがないために web.config を解析できないため、Web アプリを起動するとアプリがクラッシュすることです。コンパイラは、web.config を介して緩くリンクされているため、Core プロジェクトに 2 番目のアセンブリを含める必要があることを理解できないと思います。
アセンブリを Web プロジェクトに追加したくありません。これは密結合になるためです。アセンブリに依存するのは Web プロジェクトではなく、コア プロジェクトです。
私はこれを解決しました(サードパーティのアセンブリを使用するコアプロジェクトクラスで):
static MyClass()
{
var dummy = typeof(ThirdPartyClass);
if (dummy == null)
throw new Exception("Do not remove reference to 'ThirdPartyClass'");
}
ちょっとしたハックですが、良い点は、このサードパーティのライブラリの知識を持つべき唯一のプロジェクトである 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"));
}
}