問題タブ [gac]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - COM 登録と GAC
Web プロジェクト、C# ライブラリ プロジェクト、および Visual Studio 2005 の Web セットアップ プロジェクトがあります。Web プロジェクトでは、C# ライブラリを GAC に登録する必要があります。これは簡単です。GAC フォルダーをセットアップ プロジェクトに追加し、そこに C# ライブラリのプライマリ出力をドロップするだけです。C# ライブラリも、COM 相互運用のために登録する必要があります。GAC フォルダのプライマリ出力をクリックして選択し、Register プロパティを vsdrpCOM に変更します。セットアップ プロジェクトをビルドして実行しましたが、DLL が COM に登録されません。
これは私にとって本当に驚きではありません。COM の DLL を適切に登録するために、RegistrationServices.RegisterAssembly を使用するカスタム アクションを持つインストーラー クラスを常に追加する必要がありました。そのため、私は何年も受け入れてきたこの回避策を自分の状況に適用します。ここで、セットアップ プロジェクトの GAC フォルダー内のプライマリ出力に割り当てられたカスタム アクションが、セットアップ プロジェクトのビルドを妨げていることがわかりました。
私はいつも、.NET と COM をセットアップ プロジェクトと展開プロジェクトでうまく機能させるために何かをハッキングしているように感じていました。私の問題を解決する適切な方法は何ですか?
c# - グローバル アセンブリ キャッシュでアセンブリを構成する方法は?
GAC でアセンブリを構成する方法はありますか? System.Configuration を使用してアセンブリにカスタム構成を追加したいと考えています。
メール
visual-studio-2008 - カッシーニからのGAC参照を無視するにはどうすればよいですか?
GACにアセンブリがあり、Webアプリをデバッグしているときに読み込まれます。ただし、デバッグしているWebアプリでそのアセンブリを変更しましたが、VS2008/CassiniがGACでアセンブリを取得しています。
VS2008 / Cassiniにデバッグ中のものを使用させるにはどうすればよいですか?
.net - パブリッシャー ポリシー ファイル リダイレクト アセンブリ リクエストの作成方法
仕事で共通ライブラリを作成し、テスト サーバーの GAC にインストールしました。最近更新したので、すべてのアプリケーションで更新を使用したいと考えています。発行者ポリシー アセンブリを作成し、更新プログラムと共に GAC にインストールしましたが、Web アプリが Leggett.Common, 1.0.0.0 を読み込むと、Leggett.Common, 1.1.0.0 にリダイレクトされません。
ネットワーク ドライブに共通のアセンブリ (実際には 5 つあるが、単純にしておく) があり、その隣に発行者ポリシー xml ファイルを作成し、al.exe を使用して同じフォルダーに発行者ポリシー アセンブリを作成しました。その後、更新されたアセンブリを GAC に配置し、発行元ポリシー アセンブリを GAC に配置しました。
共通アセンブリは「Leggett.Common.dll」、発行者ポリシー ファイルは「1.1.Leggett.Common.policy」、発行者ポリシー アセンブリは「policy.1.1.Leggett.Common.dll」です。
パブリッシャー ポリシー ファイルの XML は次のようになります。
私は何を間違っていますか?
明確化
開発者はテスト サーバーにアクセスできないため、ローカルの開発マシンでこれをテストしています。
.net - machine.configで無視される.NETアセンブリバインディング構成
部分的な名前に基づいてGACにアセンブリをロードできるようにする必要がある状況があります。これを行うために、app.configファイルに以下を追加しました。
これは私が望むように正確に機能します。ただし、machine.configファイルに同じ要素を配置すると、無視されているように見え、MyAssemblyを読み込もうとするとFileNotFoundExceptionsが発生します。
以下は、要素がapp.configにあり、バインドが成功した場合のアセンブリバインディングログです。
構成がmachine.configにあり、バインドが失敗した場合のログと比較してください。
問題は、「現時点ではポリシーが参照に適用されていない」という4行目であるようです。ただし、このメッセージの意味や対処方法に関するドキュメントはほとんど見つかりません。
フレームワークに<runtime>要素を認識させるにはどうすればよいですか?
前もって感謝します!
asp.net - GAC のアクセス許可が原因で ASP.NET が失敗するのはなぜですか?
XP マシンで ASP.NET 2.0 アプリケーションを実行しようとしています。私の知る限り、すべてが正しく構成されています。ただし、次のメッセージが表示されます。
サーバー アプリケーションを利用できません
また、毎回アプリケーション イベント ログに次の 2 つのイベントが表示されます。
aspnet_wp.exe (PID: 3352) が予期せず停止しました。
ASP.NET プロセス ID にグローバル アセンブリ キャッシュへの読み取りアクセス許可がないため、要求を実行できませんでした。エラー: 0x80070005 アクセスが拒否されました。
以前は、ASP.NET アプリケーションはこのマシンで正常に動作していました。
次の手順を試しましたが、うまくいきませんでした。
- サイトのホーム ディレクトリに対する読み取りアクセス許可を ASPNET アカウントに付与しました
- aspnet_regiis -i を使用して ASP.NET 2.0 を再インストールしました
- aspnet_regiis -ga <my machine name>\ASPNET を使用して、ASPNET アカウントにアクセス許可を付与しました
- CACLS %WINDIR%\assembly /e /t /p <my machine name>\ASPNET:R を使用して、ASPNET アカウントに GAC への読み取りアクセス許可を付与しました。
- IIS 内でサイトの ASP.NET バージョンを 2.0 に設定しました
他に何ができるかわからない!
Process Monitor を使用すると、問題が直接発生しました。ヒントをくれたムンに感謝します。
これは非常にわかりにくい問題でした。以前にアセンブリ バインディング ログ ビューア (fuslogvw.exe) を使用し、カスタム パス オプションを使用してすべてのバインドをディスクに記録するように設定していました。ただし、ASPNET アカウントには、そのカスタム パスへのアクセス許可がありませんでした。したがって、デフォルトのパスを使用するように戻すと、問題は解決しました。そのカスタム パスに対する読み取り/書き込みアクセス許可を ASPNET アカウントに付与することも機能し、バインド ログを無効にすることもできます。
visual-studio - アセンブリがGACにある場合、Visual StudioのユニットテストはMissingMethodExceptionをスローしますか?
私のアプリケーションには、コンポーネント サービス内で実行されるコードが含まれているため、ビジネス ルール レイヤー (およびその依存関係) を GAC に登録する必要があります。これらの依存関係の 1 つが FooCore.dll で、これにはアプリ全体から見えるクラスとサービスが含まれています。
FooCore のクラスに新しいメソッドを追加するまで、すべてが正常に機能していました。これで、単体テストを実行すると、アセンブリの最新バージョンで GAC を更新しても、この新しいメソッドを呼び出すすべてのテストで MissingMethodException がスローされます。唯一の修正は、テストを実行する前に GAC から FooCore を削除することです。
私は次のことを試しました:
- ソリューション全体を再構築し、GAC の内容を更新してから、テストを実行 = 失敗
- テスト プロジェクトで FooCore アセンブリ参照を削除して再追加 = 失敗
- プロパティで FooCore が「ローカルにコピー」として設定されていることを確認 = 失敗
VSTS が GAC からではなく、明示的に定義された場所から参照アセンブリをロードするようにするにはどうすればよいですか?
.net - アセンブリをGACに登録/インストールする「正しい」方法は何ですか?
アセンブリを GAC に登録するには、さまざまな方法があるようです。しかし、それを行う「適切な」方法は何ですか?
Lou Franco (および gacutil) への返信:
私は開発に Gacutil を使用していますが、gacutil は .NET 1.1 以降の基本的な .NET ユーティリティには含まれていないため、インストールする適切な方法ではないように思えます。これは単なる開発者ツールです。
追加: Gacutil (以下の回答を参照) は再配布できないため、開発者以外の人に提供する予定のアプリでは使用しないでください。別名、お客様。Aaron Stebner によるこのブログ投稿 (およびコメント) を参照してください。
WIX を使用する場合:
WIX は素晴らしいかもしれませんが、内部ではどのように機能しているのでしょうか? WIX がアセンブリをインストールする正しい方法となる詳細は何ですか? それはどのように見えますか?システム/.NET 呼び出しですか? System32 のどこかに埋め込まれている dll を呼び出す必要がありますか?
(編集:WIXは内部でMSIを使用しているようです。受け入れられた回答の私のコメントを参照してください。)
最終編集:アセンブリをGACにインストールする正しい方法は、Windowsインストーラーを使用することであり、それ以外は何もないようです。Wixを試してみます。皆さんありがとう!
.net - GAC に同じ名前のアセンブリが 2 つある場合、どちらを使用するかを .Net に伝えるにはどうすればよいですか?
グローバル アセンブリ キャッシュに同じ名前の 2 つのアセンブリがありますが、バージョン番号は異なります。どのバージョンを参照するかをプログラムに伝えるにはどうすればよいですか?
記録として、これは ASP.Net Web サイトの VB.Net ページです。
.net - GAC に保存されているアセンブリのすべてのバージョンを物理的に取得する方法は?
GAC (グローバル アセンブリ キャッシュ) に同じアセンブリの 3 つのバージョンがありますが、フレームワーク フォルダーに移動するときに特定のバージョンが物理的に必要です。
c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\
フォルダーにあるアセンブリが最新バージョンです。
GAC に追加された最初のバージョンを物理的に取得できますか?