問題タブ [global-assembly-cache]

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.

0 投票する
0 に答える
2217 参照

.net-4.0 - .NETFramework4のインストールでGACが欠落している

Windows Small Business Server 2003StandardEditionを実行しているお客様のマシンに.NETFramework4のフルバージョン(クライアントプロファイル+拡張)をインストールしました。インストールはエラーなしで成功しました。ログファイルにもエラーはありませんでした...

しかし、.NET Framework 4 GAC(グローバルアセンブリキャッシュ)は完全に欠落しています!つまり、次のフォルダがありません:-

フォルダを調べると、C:\Windows\Microsoft.NET2つのサブフォルダ(以下に示す)しか表示されておらず、他には何も表示されていません。

サーバーにはまだ.NETFramework3.5がインストールされており、正常に実行されています。これは、以下のGACフォルダーが存在し、すべての.NETライブラリDLLが含まれていることを意味します。しかしもちろん、そこには.NET4DLLはありません。

.NET Framework 4 GACがないため、どのアプリケーションも実行されません。それらはすべて、 SystemまたはSystem.Xml参照の欠落について不平を言っています。不足しているファイルをC:\Windows\Microsoft.NET\Framework\v4.0.30319フォルダからアプリケーションディレクトリにコピーすると、これらのファイルについての不満はなくなり、他の不足している.NETファイルについての不満が始まります。明らかに、私は多くの.NET Library参照を使用しており、.NETFrameworkフォルダー全体を各アプリケーションにコピーしたくありません。

不足しているGACを作成する方法を知っている人はいますか?または、少なくともGACが消える原因を突き止めますか?.NET Framework 4を再インストールしようと何度も試みましたが、GACが常に欠落しています...


編集: GACの内容を確認するために実行gacutil.exe -lしてみましたが、バージョン1.0から3.5の.NETアセンブリのみが一覧表示されます。すべての.NET4アセンブリがありません。

注:.NET4バージョンのgacutil.exeにはVisualStudio (またはWindows SDK)のみが付属しているため、ファイルをお客様のサイトにコピーする必要があります。

0 投票する
1 に答える
2719 参照

c# - アセンブリがGACに配置されていませんが、gacutilはそこにあることを示しています

グローバル アセンブリ キャッシュ (GAC) に関して、システムに奇妙な動作があることに気付きました。私が興味を持っているアセンブリは log4net Version= 1.2.11.0 です

の出力gacutil /l "log4net"は次のとおりです。

C:\Windows\system32>gacutil /l "log4net" Microsoft (R) .NET グローバル アセンブリ キャッシュ ユーティリティ。バージョン 4.0.30319.1 Copyright (c) Microsoft Corporation. 全著作権所有。

グローバル アセンブリ キャッシュには次のアセンブリが含まれています:
log4net、Version=1.2.10.0、Culture
=neutral、PublicKeyToken=1b44e1d426115821、processorArchitecture=MSIL

アイテム数 = 2

ただし、エクスプローラー シェル (再起動の前後) を使用して GAC を表示すると、1 つのバージョンしか表示されません。

ここに画像の説明を入力

これは、アプリケーションがアセンブリを解決できないという事実によって悪化しますが、アプリケーション ベース(bin フォルダー) に配置すると正常に動作します。この記事によると、GAC はアプリケーション ベースのにプローブされます。これは、アセンブリが GAC にないことを示します。

それでlog4net Version=1.2.11.0、GACにいますか?もしそうなら、なぜ私のアプリケーションはそれを見つけられないのですか?

0 投票する
1 に答える
3580 参照

c# - 大きな頭痛の種となる gacutil と環境のマイナー バージョンの違い

状況は次のとおりです。

グローバル アセンブリ キャッシュに入る .NET 2 でコンパイルされた DLL があります。次のmyDLL.dll.configファイルがあります。

次に、アセンブリ リンカーを使用してポリシー ファイルを作成します。

しかし、ポリシー ファイルをグローバル アセンブリ キャッシュに読み込もうとすると、

エラーが発生します:

.NET グローバル アセンブリ キャッシュ ユーティリティのバージョンは 2.0.50727.42 ですが、ビルド環境で新しい C# .NET 2 コンソール プロジェクトを作成し、次のコマンドを実行してバージョンを確認しました。

私の Environment.Version は 2.0.50727.5466 です。

これはすべて同じコンピューター、特に私の開発ボックスで発生しています。

myDLL.dll を \bin\release フォルダーから c:\Windows\assembly フォルダーにコピーできますが、問題ありません。しかし、policy.1.2.myDLL.dll ファイルを \bin\release から \assembly にコピー アンド ペーストしようとするか、gacutil を使用しようとすると失敗します。

0 投票する
1 に答える
1203 参照

gac - 複数の .dll に対する GAC アセンブリのリダイレクト

特定の をリダイレクトしようとしています。.dllそれを と呼びましょうMyAssembly.dll。このアセンブリには 2 つのバージョンがあります。

これら 2 つのアセンブリを 3 番目のバージョンにリダイレクトしたい: 1.2.0.0. その目的のために、 GAC に適用される.configをビルドするために、次のファイルを作成しました。Publisher Policy

これで.config、ポリシーを生成するための適切なファイルを作成します。しかし、私の問題は、Policy.

次のステップの前に注意してください: アセンブリのバージョン管理は次のように機能します。

初めてポリシーを作成したいと思ったとき、リダイレクトしたいアセンブリ バージョンが次のようなものである場合1.0.0.0、次のように一致するポリシーを作成する必要があることに気付きました。

MyAssembly.dllこれにより、1.0.* からバージョン 1.1にリダイレクトできます。

しかし、上記で説明したように、複数のアセンブリをリダイレクトしたい場合、どうすればそのポリシーを生成できますか? ポリシーはどのように表示されますか?

2 つのアセンブリがある場合:

をビルドするにはどうすればよいPublisherPolicyですか?

0 投票する
2 に答える
12338 参照

c# - .NETアセンブリがGACにインストールされているかどうかをプログラムで判断する方法は?

アセンブリがローカル マシンの GAC (グローバル アセンブリ キャッシュ) に登録されているかどうかをプログラムで確認する最も簡単な方法は何ですか? ローカル マシンの GAC に存在するかどうかを確認するために、アセンブリ DLL またはアセンブリ オブジェクト自体の場所を指定できる、使いやすい .NET API はありますか? 私の場合、チェックしているアセンブリは、プログラム チェックの現在の AppDomain に既に読み込まれているためAssembly.ReflectionOnlyLoad、他の投稿で提案されているように、例外の呼び出しとキャッチが機能するかどうかはわかりません。 .

gacutil.exe理想的には、チェックのような外部実行可能ファイルの呼び出しを避けたいと思います。

0 投票する
1 に答える
331 参照

.net - GAC dll をアンインストールできない

GACからdllをアンインストールしようとしていますが、できません。

次のコマンドを実行するとgacutil -u AssemblyName、エラー メッセージが表示されます The assembly is for atleast one application required。(私のオリジナルのドイツ語メッセージから翻訳: Die Assembly ist für mindestens eine Anwendung erforderlich.)

アンインストールをブロックしているアプリケーションを特定するにはどうすればよいですか。理にかなっていると思われるものはすべてアンインストール済みです。たぶん、まだいくつかのレジストリエントリが横になっているか、何かがありますか?!?

あなたが私を助けてくれることを願っています。

0 投票する
1 に答える
2302 参照

c# - Visual Studio は、新しいターゲット フレームワークのアセンブリを使用します

私はターゲット フレームワークに対して開発してい.NET Framework 3.5ます。プロジェクトLoggerは次のライブラリを使用します

これは、プロジェクトで参照されているアセンブリです。

アプリケーションMyAppにはプロジェクトへのプロジェクト参照があるLoggerため、 への間接参照がありNewtonsoft.Json.dllます。

Copy Localプロパティを に設定すると、true強制的Newtonsoft.Json.dllに出力ディレクトリにコピーされます。をコンパイルすると、 も対応する出力ディレクトリにMyAppコピーされます。GACNewtonsoft.Json.dllにはないことに注意してくださいNewtonsoft.Json.dll

ここまでは順調です。

ここで、次のライブラリを.NET Framework 4.0GAC にインストールしました ( %windir%\Microsoft.NET\assembly)。

このライブラリを GAC にインストールする.NET Framework 4.0と、参照されているプロジェクトNewtonsoft.Json.dllが の出力ディレクトリにコピーされなくなりMyAppます。しかし、それは依然として の出力ディレクトリにコピーされますLogger

私はこの動作を自分自身に説明しようとしました:プロパティが に設定されているため、参照されているプロジェクトNewtonsoft.Json.dllは の出力ディレクトリにコピーされます。LoggerCopy Localtrue

Newtonsoft.Json.dllしかし、が の出力ディレクトリにコピーされなくなった理由がわかりませんMyApp。GAC にインストールしたライブラリは、.NET Framework 4.0(私の意見では) ビルド システムに「表示」されるべきではありません.NET Framework 3.5

ライブラリが見つからないSystem.IO.FileNotFoundExceptionため、実行時に が表示されます (ライブラリが で使用される GAC 3.5 ではない 4.0 GAC にあるため、これは明らかです)。Newtonsoft.Json.dllMyApp

  • ターゲット フレームワーク 3.5 プロジェクトのビルド システムが の GAC 内のアセンブリを認識するのはなぜ.NET Framework 4.0ですか?
  • GAC 4.0 にがある場合Newtonsoft.Json.dll、ターゲット フレームワーク 3.5 で参照されるローカルを出力ディレクトリにコピーするにはどうすればよいですか?MyAppNewtonsoft.Json.dll
0 投票する
0 に答える
368 参照

.net - C:\WINdows\assembly\tmp の下のコピーを指す GAC 内の参照アセンブリ

アプリケーションによって実行時に参照されているアセンブリのバージョンを確認しようとしています。アセンブリが GAC にインストールされていることはわかっています。これは、MSI を介してインストールされたサードパーティの商用製品であり、実行時に一覧表示さgacutil /lれ、 の下のフォルダーにも表示されるためC:\Windows\Microsoft.NET\assembly\GAC_MSILです。

Process Explorerを使用して、参照されている DLL を下のペインに表示し、参照されているアセンブリを確認しています。参照されているアセンブリが にあることがわかりましたC:\Windows\assembly\tmp\NYIEPEO0\。Windows エクスプローラーでそのフォルダーを参照しようとすると (アプリケーションがまだ実行中で、参照されているアセンブリがまだ Process Explorer に表示されている場合)、存在しないかアクセスできないと表示されます。さらに、Process Explorer にはバージョン、説明などの詳細が表示されないため、アセンブリのバージョンを特定できません。

私の質問は次のとおりです。参照されているアセンブリが実際に存在する場所ではなく、「tmp」フォルダーの下にあるのはなぜですか(アセンブリのインストールに関係しているというこのようなソースを見たことがありますが、アセンブリはすでにインストールされています上記で指摘したように、正しい場所にある)、実行時にすべてのアセンブリが適切な場所から参照されるように、GAC でその動作を無効にすることはできますか?