問題タブ [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.
.net-4.0 - .NETFramework4のインストールでGACが欠落している
Windows Small Business Server 2003StandardEditionを実行しているお客様のマシンに.NETFramework4のフルバージョン(クライアントプロファイル+拡張)をインストールしました。インストールはエラーなしで成功しました。ログファイルにもエラーはありませんでした...
しかし、.NET Framework 4 GAC(グローバルアセンブリキャッシュ)は完全に欠落しています!つまり、次のフォルダがありません:-
フォルダを調べると、C:\Windows\Microsoft.NET
2つのサブフォルダ(以下に示す)しか表示されておらず、他には何も表示されていません。
サーバーにはまだ.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)のみが付属しているため、ファイルをお客様のサイトにコピーする必要があります。
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にいますか?もしそうなら、なぜ私のアプリケーションはそれを見つけられないのですか?
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 を使用しようとすると失敗します。
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
ですか?
c# - .NETアセンブリがGACにインストールされているかどうかをプログラムで判断する方法は?
アセンブリがローカル マシンの GAC (グローバル アセンブリ キャッシュ) に登録されているかどうかをプログラムで確認する最も簡単な方法は何ですか? ローカル マシンの GAC に存在するかどうかを確認するために、アセンブリ DLL またはアセンブリ オブジェクト自体の場所を指定できる、使いやすい .NET API はありますか? 私の場合、チェックしているアセンブリは、プログラム チェックの現在の AppDomain に既に読み込まれているためAssembly.ReflectionOnlyLoad
、他の投稿で提案されているように、例外の呼び出しとキャッチが機能するかどうかはわかりません。 .
gacutil.exe
理想的には、チェックのような外部実行可能ファイルの呼び出しを避けたいと思います。
.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
.)
アンインストールをブロックしているアプリケーションを特定するにはどうすればよいですか。理にかなっていると思われるものはすべてアンインストール済みです。たぶん、まだいくつかのレジストリエントリが横になっているか、何かがありますか?!?
あなたが私を助けてくれることを願っています。
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.0
GAC にインストールしました ( %windir%\Microsoft.NET\assembly
)。
このライブラリを GAC にインストールする.NET Framework 4.0
と、参照されているプロジェクトNewtonsoft.Json.dll
が の出力ディレクトリにコピーされなくなりMyApp
ます。しかし、それは依然として の出力ディレクトリにコピーされますLogger
。
私はこの動作を自分自身に説明しようとしました:プロパティが に設定されているため、参照されているプロジェクトNewtonsoft.Json.dll
は の出力ディレクトリにコピーされます。Logger
Copy Local
true
Newtonsoft.Json.dll
しかし、が の出力ディレクトリにコピーされなくなった理由がわかりませんMyApp
。GAC にインストールしたライブラリは、.NET Framework 4.0
(私の意見では) ビルド システムに「表示」されるべきではありません.NET Framework 3.5
。
ライブラリが見つからないSystem.IO.FileNotFoundException
ため、実行時に が表示されます (ライブラリが で使用される GAC 3.5 ではない 4.0 GAC にあるため、これは明らかです)。Newtonsoft.Json.dll
MyApp
- ターゲット フレームワーク 3.5 プロジェクトのビルド システムが の GAC 内のアセンブリを認識するのはなぜ
.NET Framework 4.0
ですか? - GAC 4.0 にがある場合
Newtonsoft.Json.dll
、ターゲット フレームワーク 3.5 で参照されるローカルを出力ディレクトリにコピーするにはどうすればよいですか?MyApp
Newtonsoft.Json.dll
.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 でその動作を無効にすることはできますか?