6

それらの型参照がプロジェクトに追加されていないときにビルドが壊れるように、web.config または app.config で厳密に型指定された参照を作成することは可能ですか?

たとえば、宣言された WhizzBangers を web.config で検索する WhizzBangerFactory があるとします。私は次のような構成を持っているかもしれません、

<whizBangs>
<add name="SuperDooper" type="MyProject.WhizzBangers.SuperDooperWhizzBanger, MyProject.WhizzBangers" />
<add name="Fantastical" type="AnotherProject.WhizzBangers.FantasticalWhizzBanger, AnotherProject.WhizzBangers" />
</whizBangs>

MyProject.WhizzBangers および AnotherProject.WhizzBangers への参照がない場合でも、これは完全に正常にコンパイルされます。私が望むのは、ビルドが失敗し、参照を見逃したことを知らせることです。

4

7 に答える 7

3

web.config はランタイムのみの解決です。ビルドの成功または失敗に遅れる。

同じビルドが web.config で参照されている型をビルドする場合は、web.config ファイルを解析して、すべてのファイルが存在することを確認します (これには、Web サイトに必要なすべてのバイナリが最終的に共通のディレクトリに配置される必要があります。 tfs のようなもので、これはコンパイル後のステップとして実行され、成功した場合にのみバイナリがドロップ ディレクトリにコピーされます。それ以外の場合、ビルドは失敗します

他のタイプが別のビルドによって提供され、インストーラーの一部として含まれている場合、同じ種類の構成ファイルの解析を、サニティ チェックとしてスタンドアロン アプリ (インストールの一部) として実行できます。

もう 1 つの方法 (必要なすべての型を参照する別のプロジェクトをビルドに含め、コンパイラが最適化しないようにその型のインスタンスを作成する)、このプロジェクトを Web プロジェクトの依存関係として追加します。そうすれば、タイプ プロジェクトが失敗すると、Web ビルド プロジェクトも失敗します。

于 2012-12-01T03:16:12.063 に答える
2

2 つのポイント:

まず、参照が欠落している場合でも、プロジェクトはどのようにコンパイルされますか? それはあなたがそれらを本当に必要としないことを意味します! 必要のないものへの厳密に型指定された参照をどのように持つことができますか? 不要な参照を見逃したときに警告を求めていますか?

第二に、

あなたが何をしたいのかはまだはっきりしていませんが、ビルド前のステップを作成することで、あなたが望むことを達成できると思います。web.config ファイルの処理とチェックを行うには、小さな C# コンソール プログラムを作成する必要がある場合があります。

これは、ツールを使用して追加した場合に、Visual Studio がリソースまたはプロパティを表すクラスを生成する方法に似ています。たとえば、[プロジェクト] -> [プロパティ] の [リソース] タブに移動してリソースを作成すると、Visual Studio がクラスを含む Resources.Designer.cs ファイルを出力し、コード内で次のように参照できることがわかります。

Properties.Resources.MyTestResource

興味深いことに、生成されたコード内にこのコメントがあります

/// <summary>
///   A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.

おそらく、クラスを生成するビルド前のステップを追加することで、プロジェクトで同様のことができるように思えますか?

StronglyTypedResourceBuilder クラスのリファレンス ページは次のとおりです。

http://msdn.microsoft.com/en-us/library/system.resources.tools.stronglytypedresourcebuilder.aspx

適度に使いやすそうです。これはあなたのシナリオには当てはまらないかもしれませんが、例として使用しています。プロキシタイプなどを生成したいようです...

于 2012-12-03T16:18:39.083 に答える
1

Resharperはこれを支援することができます。

型が参照されていないweb.config内のものを視覚的に区別します(または、間違えました-この例では、「Microsoft」の末尾から「t」を削除しました)

ここに画像の説明を入力してください

ただし、それでもコンパイルに失敗することはありません。これは残念なことです。そうすべき!

于 2012-11-28T16:08:52.647 に答える
1

ある種のIoCシステムを使用する代わりにあなたをお勧めします。MicrosoftはすでにUnityFrameworkを提供していますが、これはあなたが試しているこのソリューションよりもうまく機能します。Ninjectもかなり良いです。

http://www.ninject.org/

于 2012-12-04T18:35:01.387 に答える
0

Philip Daniels の発言に基づいて、ビルド後の手順が必要になる場合があります。

プロジェクトをコンパイルして、参照されているすべての DLL をその出力フォルダーに配置し、ツール (おそらくカスタム作成、または Github または Codeplex に何かがある場合) を使用して .config ファイルをスキャンし、指定された型を使用できるかどうかを確認します。出力フォルダにあります。

見つからない場合、ツールはゼロ以外のリターン コードを返し、ビルド プロセスに通知します (ビルド プロセスにフックされていることを確認してください。ms-project ビルド イベントにそのエラー コードをキャプチャさせる必要があります)。手動では、適切なエラー メッセージで失敗したと思います)。

于 2012-12-05T09:56:42.497 に答える
0

新しい Task 実装を作成するか、web.config からクラス名を解析し、 Assembly.Loadを使用してそれらをロードしようとするInline Taskを使用して、Msbuild ステップを作成します。読み込みに失敗すると、ビルドに失敗する例外がスローされます。

于 2012-12-05T12:43:04.023 に答える
0

この構成を使用し、ビルドの一部としてテストを統合する単体テストを作成してみてください。これにより、自動ビルド システムでも一部のテストが失敗していることを正しく示し、問題を特定するのに役立ちます。

または、whizBangs 構成を別の構成ファイルに配置して、web.config にソースを記載することもできます。この個別の構成ファイルを保存すると、構成ファイルのクラス表現を形成する cs ファイルを自動生成する customtool (VS で既に利用可能なカスタム ツールの機能) を呼び出すことができます。この cs ファイルは、目的を示すカスタム ツールによって生成された適切なコメントと共にチェックインできます。開発者がこのファイルを変更して保存すると、config ファイルと cs ファイルの両方がチェックアウトされて編集されます。

于 2012-12-05T13:27:19.110 に答える