Visual Studioがweb.configにアセンブリを追加するのを停止する方法は?
-
05-07-2019 - |
質問
Webサイトを作成または公開するたびに、Visual Studioは web.config ファイルをチェックアウトして、必要のない多数のアセンブリを追加できるようにします。
言い換えれば:
web.config の前:
<configuration>
<system.web>
<compilation>
<assemblies>
</assemblies>
</compilation>
</system.web>
</configuration>
web.config 後:
<configuration>
<system.web>
<compilation>
<assemblies>
<add assembly="Microsoft.ReportViewer.Common... />
<add assembly="Microsoft.ReportViewer.WinForms... />
<add assembly="System.DirectoryServices... />
<add assembly="System.Windows.Forms... />
<add assembly="ADODB... />
<add assembly="System.Management... />
<add assembly="System.Data.OracleClient... />
<add assembly="Microsoft.Build.Utilities... />
<add assembly="Microsoft.ReportViewer.ProcessingObjectModel... />
<add assembly="System.Design... />
<add assembly="Microsoft.Build.Framework... />
</assemblies>
</compilation>
</system.web>
</configuration>
これらのアセンブリはいずれも必須ではなく、ほとんどはターゲットのテストサーバーまたは運用サーバーに存在しません。
私はビルドするたびにそれらを削除し続けますが、本物は本当に速く迷惑になります。
今、私の回避策はweb.configを読み取り専用のままにすることです。そのため、Visual Studioはアセンブリを追加できません。
更新
証拠としてのスクリーンショット:
プロジェクトプロパティページの前:
Web.Config before:
後のプロジェクトプロパティページ:
Web.config after:
2つを更新
これらの外部参照を追加せずにWebサイトが機能することを明示的に指摘する必要があります。私の暫定的な解決策は、web.configを読み取り専用のままにして、Visual Studioが変更を試みるため読み取り専用であると不平を言うたびに Cancel を押すことです。 Visual Studioを最初の場所で変更しようとするのを止めることができれば...
3つの更新
不可能なようです。 「 Visual Studioがweb.configにアセンブリを追加するのを止めることはできません」という答えを誰かが気軽に答えることができます。マークします。
質問を続ける唯一の理由は、誰かが超秘密のオプション、レジストリキー、またはプロジェクトまたはソリューションの設定を知っており、Visual Studioに思考を停止するように指示することです。
4つの更新
私は受け入れられた答えを受け入れませんでした。できれば受け入れません。私はまだ万能薬を期待しています。しかし、今私はに傾いています:
- 回答:完了できません( manu08 )
- 回避策:フィルタリングされたGACアセンブリのレジストリキー( Nebakanezer )
Visual Studioがweb.configにアセンブリを追加しないようにする方法
参照
解決
VS2005を使用して.net 1.1(VS2003).aspxを編集し、保存すると、web.configに不思議なことにネットが設定されます。 2.0アセンブリが追加されました:
VS2008またはVS2010を使用した場合、これは発生しません。したがって、これはVS2005 IDEのバグだと思います。
他のヒント
「Avatar DotNet Library」とかそれらのアセンブリを単独で参照しています。 プロジェクトを正しく展開するには、参照アセンブリの参照が必要です。 それ以外の場合、参照アセンブリはどのように機能しますか?
参照されているアセンブリは、存在するものの、独自の参照を使用しない可能性があることに注意してください。
編集:優れたツール&quot; .Net Reflector&quot;を使用できます。これを確認します。
Visual Studio 2005でこの問題が発生しました(ただし、このソリューションがVS 2008で機能することを報告できて嬉しいです。下の太字のテキストを参照してください)。 VSがweb.configファイルにアセンブリを追加する前にチェックするレジストリセクションがあります。
キーは次のとおりです:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}\FilteredGACReferences
つまり、Visual StudioでMicrosoft.VisualStudio.Designer.Interfacesアセンブリをweb.configに追加したくないとしましょう。次のエントリをレジストリに追加すると、設定が完了します。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}\FilteredGACReferences\Microsoft.VisualStudio.Designer.Interfaces
それは私にとって完璧に機能しました。そして、はい、あなたのチームの残りは同じことをしなければなりませんが、少なくとも毎回手動でエントリを削除する必要はありません:)
VS 2008で機能させるには、レジストリパスの8.0を9.0に変更します
「Webサイト」を変換します; 「Webアプリケーション」へのプロジェクトプロジェクト。
&quot;ウェブサイト&quot;プロジェクトファイルがないため、web.configのすべてのアセンブリ参照が含まれます。 「Webプロジェクト」プロジェクトファイルがあり、すべての参照はプロジェクトファイルに保存されます。
参照を削除します。
-
Webアプリの場合: Solution Explorer の下に参照が表示されます。
-
Webサイトの場合:ソリューションエクスプローラーでプロジェクトを右クリックし、[プロパティページ]を選択します。そこで管理します。
HTH
共有アセンブリがそれらを参照する場合、それらは呼び出し元プロジェクトにも追加されます。
Avatarライブラリはこれらの他の参照を作成するため、Visual Studioはこれらの参照をメインプロジェクトにも追加します。そうしないと、必要な参照が見つからないため、Avatarライブラリの呼び出しが失敗する可能性があります。
まあ、これはハックのように思えるかもしれませんが、要件を考えると、実行時にAssembly.LoadまたはLoadFromを使用してアバターアセンブリを動的に読み込むことができます。これにより、メインプロジェクトから参照が保持され、web.configの余分な参照行が防止されます。ただし、Avatarプロジェクトの少数のクラスのみを使用している場合、これは本当に実用的です。メインプロジェクトがアバターインスタンスを処理する際に厳密なタイピングを維持するために、1つ以上のアバタークラスが実装したインターフェースを保持する両方のプロジェクトが参照する3番目のプロジェクトを作成します。これは、以前に回答を提出したより多くの作業になる可能性があることを認めます。この方法に興味がある場合は、Googleで.Netでプラグインを作成してください
webappではなくWebサイトを使用している限り、Visual Studioがweb.configにアセンブリを追加しないようにする方法はわかりません。この種の同じ問題は、私の会社のソリューションでも発生します。
Visual Studioがweb.configにアセンブリを追加するのを止めることはできません。
申し訳ありませんが、Visual Studioがweb.configにアセンブリを追加するのを止めることはできませんが、すべてが失われるわけではありません。
これは過去にヒットしました。誰かがいくつかの参照(WinFormsを含む)を低レベルのデータアクセスアセンブリに追加しました。 Webサイトは低レベルのデータアクセスアセンブリを使用したため、web.configファイルにWinFormsなどが追加されました。
解決策は、彼のコードを正しいアセンブリに移動し、誤った参照を削除することでした。
不要な参照を持つアセンブリをどのように並べ替えることができず、不要な参照に依存するコードを呼び出していないことがわかっている場合。その後、次のことができます(これらはどれも素晴らしいことではありません)
- これらの不要なアセンブリ参照のweb.configからの削除を自動化するカスタムインストールアクションを作成します
- カスタムMSBUILDアクションを作成して、ビルド時に削除します
- アプリケーションのインストール時に、別の手書きのweb.configファイルを使用します。
Visual Studioがweb.configファイルへの参照を追加する理由を見つけるには、時間がかかる場合があります。 Webサイトで直接または間接的に使用されるすべてのアセンブリを手動で確認する必要があります。
MicrosoftがASP.NET 2.0でWebサイトを発明した理由を知っていますが、単純に suck している場合もあります。実用的な場合は、サイトをWebアプリケーションプロジェクトに変換すると、このような問題はなくなります。
それが実用的でない場合は、できるだけ多くのコードを別のクラスライブラリプロジェクトにリファクタリングしてください。 Webサイトからクラスライブラリに移動できる参照は、 web.config
の変更を削減します。
編集:明確にするために、Webサイトでは、aspnetコンパイラがすべて(マークアップ、コードビハインド、ロット)をコンパイルするため、すべてのアセンブリ参照は web.config
。ただし、Webアプリケーションプロジェクトでは、C#またはVBコンパイラは分離コードファイルを個別のDLLにコンパイルし、マークアップをコンパイルするときにaspnetコンパイラによって参照されます。このシナリオでは、コードビハインドファイルでのみ参照されるアセンブリ は、コードビハインドDLLに入り、 web.config
にはまったく触れません。 直接マークアップで参照されるアセンブリのみが web.config
に入ります。
Visual Studioが他のユーザーによって参照されているアセンブリに参照を自動的に追加するのを防ぐことができるとは思わない。
1つの解決策は、自動化するカスタムアクションでWebセットアッププロジェクトを作成することです
これらの不要なアセンブリ参照を web.config
から削除します。
これらは、プロジェクトに必要なすべてのアセンブリであり、何らかの形またはマナーであり、ASP.NETが実行時にページ上で行うコンパイルを支援します。それらはおそらく、プロジェクトで使用しているコードまたはそれらを使用している別のライブラリのいずれかによってインポートされています。
ただし、ドキュメントによると。これらは、 C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG
:
<assemblies>
<add assembly="mscorlib" />
<add assembly="System, ..." />
<add assembly="System.Configuration, ..." />
<add assembly="System.Web, ..." />
<add assembly="System.Data, ..." />
<add assembly="System.Web.Services, ..." />
<add assembly="System.Xml, ..." />
<add assembly="System.Drawing, ..." />
<add assembly="System.EnterpriseServices, ..." />
<add assembly="System.Web.Mobile, ..." />
<add assembly="*" />
</assemblies>
見てみると、 assembly =&quot; *&quot;
参照が追加されています。また、このコマンドに関するドキュメントを読むと、次のように表示されます。
オプションで、指定できます 追加するアスタリスク(*)ワイルドカード文字 プライベート内のすべてのアセンブリ アプリケーションのアセンブリキャッシュ、 \ binにあります アプリケーションのサブディレクトリまたは .NET Frameworkのインストール ディレクトリ (%systemroot%\ Microsoft.NET \ Framework \ version)。
これは、/ binディレクトリまたは.NET Frameworkインストールディレクトリにあるすべてのアセンブリが既に含まれていることを意味します。
これがあなたの問題について教えてくれるのは、インクルードされるアセンブリが既に何らかの方法でプロジェクトに参照されているということです。そして、それらはおそらく Avatar Dot Net Library
またはページ上のいくつかのコントロールから来ています。 「参照」を確認します;これらの不要な参照のために、アバターライブラリのVisual Studioプロジェクトのフォルダーを使用します。ビルドプロセスがこれらのライブラリを取得する場所だからです。
つまり、それらを含めたくない場合は、これらのライブラリのすべての参照の参照プロジェクトをスクラブします。
代わりに、MSBuild XMLパーサーを使用して、ビルドプロセスを実行するたびにweb.configのそのセクションを削除できます。個人的には、 XmlUpdate
というタスクを使用して、web.configの特定の部分を変更し、本番環境に対応させます。同じことをしたい場合は、 MSBuildコミュニティタスクの一部です。
vistaまたはserver 08マシンで実行している場合、appcmdコマンドラインユーティリティを使用して、手動で削除するのではなく、再構築後に削除できます。
http://technet.microsoft.com/ en-us / library / cc772200(WS.10).aspx http://learn.iis.net/page.aspx / 114 / getting-started-with-appcmdexe /
http://msdn.microsoft.com/en-us/を参照してください。 library / ms178728.aspx
プロパティページに表示されるのはすべてではなく、Machine.configファイルにも暗黙の参照が存在し、コンパイル時に追加されることが説明されています。これがお役に立てば幸いです。
「使用」をチェックすることから始めます;コードファイル内の文、および.aspx、.ascxファイル内の参照。これらのいくつかを参照したように聞こえます(一部はデフォルトで[新しい項目の追加]テンプレートから追加されます。