問題タブ [fusion]
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 - machine.configで無視される.NETアセンブリバインディング構成
部分的な名前に基づいてGACにアセンブリをロードできるようにする必要がある状況があります。これを行うために、app.configファイルに以下を追加しました。
これは私が望むように正確に機能します。ただし、machine.configファイルに同じ要素を配置すると、無視されているように見え、MyAssemblyを読み込もうとするとFileNotFoundExceptionsが発生します。
以下は、要素がapp.configにあり、バインドが成功した場合のアセンブリバインディングログです。
構成がmachine.configにあり、バインドが失敗した場合のログと比較してください。
問題は、「現時点ではポリシーが参照に適用されていない」という4行目であるようです。ただし、このメッセージの意味や対処方法に関するドキュメントはほとんど見つかりません。
フレームワークに<runtime>要素を認識させるにはどうすればよいですか?
前もって感謝します!
.net - .Net マネージ コードからの 32 ビットまたは 64 ビット DLL のロード
Scintilla.Net コンポーネントを介してマネージド アプリケーションから読み込まれるアンマネージド DLL (Scintilla コード エディターの scilexer.dll、CodePlexの Scintilla.Net によって使用される) があります。Windows 管理アプリケーションは、32 ビット環境と 64 ビット環境の両方で問題なく実行されますが、64 ビットまたは 32 ビットの scilexer.dll を使用する別のインストールを作成する必要があります。
32 ビット形式と 64 ビット形式の両方の DLL を配布する方法はありますか?
msbuild - 解決方法: カスタム MSBuild タスクには、AppBase 外でのアセンブリが必要です
C# プロジェクトをビルドするときに実行したいカスタム タスクがあります。このタスクは、別のアセンブリ MyCommon.DLL を参照する MyTask.dll にあります。
問題は、MyCommon.dll が MyTask.dll に対して "..\Common\MyCommon.dll" にあり、MSBuild プロセスの AppBase ディレクトリの外に置かれていることです。MSBuild のログを分析し、バインドの失敗に関する Fusion のレポートを見て、これが実際に問題であることを確認しました。
ビルド プロセス中に Fusion に MyCommon.dll を検出させるにはどうすればよいですか? アセンブリを移動すると、それに依存するアプリが壊れることに注意してください。
更新: まあ、結局はコピーを使用するようです。他のソリューションはすべてシステム全体の変更を必要としますが、これはここでは保証されません。
.net - WCF は、ServiceHost の作成時に「System.ServiceModel」の FileNotFound 例外をスローします。
WCF で非常に奇妙な問題が発生しています。ソリューションに 2 つのプロジェクトがあり、それぞれがセルフホステッド WCF サービスを開始します。
プロジェクト 1:
これは正常に実行されます。ただし、次を含む2番目のプロジェクトを実行しようとすると:
私は例外を受け取ります:
融合ログ:
本当に奇妙な部分は、デバッガーで、この例外が発生したときに、Visual Studio の「QuickWatch」に移動して次のように入力できることです。
デバッグ中に SysInternals File System Watcher を実行しようとしましたが、devenv.exe が .pdb ファイルを追跡してスタック トレースを生成しようとする以外に、'FileNotFound' エラーは表示されません。
誰が何を見るべきかについて他のアイデアを持っていますか?
更新 #1
プロセスのフュージョン ログを調べたところ、何かおかしなことが起こっているようです。System.ServiceModel の 2 つのログ エントリが連続しています。
次に、2 番目のエントリ:
System.ServiceModel を 2 回、GAC ではなくローカル アプリ ディレクトリから 1 回ロードしようとしているようです。よくわかりません...
c# - TypeLoadException は「実装なし」と言っていますが、実装されています
テスト マシンに非常に奇妙なバグがあります。エラーは次のとおりです。
System.TypeLoadException: Method 'SetShort' in type 'DummyItem' from assembly 'ActiveViewers (...)' does not have an implementation.
理由がわかりません。SetShort
クラスにありDummyItem
、展開/バージョン管理の問題ではないことを確認するためだけに、イベント ログへの書き込みを含むバージョンを再コンパイルしました。奇妙なことは、呼び出し元のコードがメソッドを呼び出しさえしないことSetShort
です。
dll - gdiplus.dll を出荷するが、Windows で使用しないようにする方法は?
gdiplus に依存するアプリケーションがあります。アプリケーションを Windows 2000 でも実行する必要があります。
Windows 2000 コンピューターが機能するように、アプリケーション ディレクトリに GDIPlus を含めたいのですが、マシンが Windows XP、Windows Vista、Windows 7 などの場合は、出荷されて更新される GDIPlus のバージョンを使用する必要があります。 Windowsで。
ありえない?
windows - 最初にシステム dll を使用するように Windows のフュージョン ローダーに指示しますか?
Windows 2000 のユーザー用のアプリケーション ディレクトリにDLL を含むアプリケーションを展開する必要があります。DLLは、システム DLL として Windows XP に出荷されました。
Windows XP は、アセンブリの依存関係を解決するために Microsoft が Fusion ローダーを導入したときでもありました。
フォルダー内の dll のバージョンを使用しないように指示することはできますか? また、Windows 2000 には Fusion ローダーも dll もありません。そのため、フォルダー内のバージョンを使用するだけですか?
.net - C#クラスのコンストラクターの順序:パラメーター化、デフォルト、静的?
3つのコンストラクター、デフォルト(引数なし)コンストラクター、パラメーター化されたコンストラクター、および静的コンストラクターを持つクラスがあるとします。このような:
パラメーター化されたコンストラクターを呼び出すとすると、これらのコンストラクターはどのような順序で実行されますか?
私はそれが静的で、パラメータ化され、そしてデフォルトだと思った。しかし...私の経験はそれに同意していません。
背景:参照されているDLLをリソースとして埋め込むアプリがあります。実行時に、アプリケーションはを介してアセンブリリゾルバを登録します
ここで、Resolverメソッドは次のように定義されています。
Resolverは、適切に選択した方法でアセンブリを作成できることを理解しました。私のアプリの場合、それは
ここで、 nameは組み込みリソースの名前です。次に、このリソースのすべてのバイトを読み取り、読み取られたバイトのブロックに対してAssembly.Load(byte [])を実行します。
これは最初は奇妙に聞こえるかもしれませんが、機能します。
ILMergeだけでなく、なぜ世界にアセンブリを埋め込むのでしょうか。 良い質問。埋め込まれたアセンブリが署名されており、マージされたアセンブリに再署名するためのキーがないため、埋め込む必要があると思います。だから私は埋め込みます。
問題は次のとおりです。埋め込みアセンブリで定義されている型のプライベートインスタンスメンバー変数をクラスで宣言するとします。私の場合、これは列挙型であり、その列挙型の値も初期化します。
これで、静的コンストラクターがすでに実行されている場合、そのプライベートメンバーの初期化子は問題なく実行できます。しかし、私が見ているのは「ファイルが見つかりません」エラー、つまり基本的なFusionエラーです。
プライベートインスタンス変数を削除しても、Fusionエラーは発生しません。
そのタイプの変数、または組み込みアセンブリで定義された他のタイプは、クラスのメンバーインスタンス変数として初期化されない限り、後で使用できます。インスタンスメソッドで型を使用できますが、問題ありません。
これを書いて、私は自分の質問に対する答えを思いついたのではないかと思っています。多分それはJITタイミングの問題です:多分インスタンスコンストラクターは静的コンストラクターが実行される前にJITされています。これは多分?フュージョンエラーにつながりますか?
誰かが何か洞察を持っていますか?
埋め込まれたアセンブリに依存するすべてのインスタンス変数を削除して、問題を回避するようにクラスを再設計できるため、これは大きな重大な問題ではありません。しかし、私はそれを理解したいと思います。
c# - Fusion ローダーが実際に存在する DLL を見つけられない
Fusion ローダーが警告や確認なしで DLL を単純にスキップする原因を知っている人はいますか?
コマンドライン アプリケーションから (C# で) これを実行しようとすると、
私はこれを見る:
「要求されたタイプの 1 つ以上をロードできません。詳細については、LoaderExceptions プロパティを取得してください。」
その DLL には Platform.DLL への依存関係がありますが、その依存関係の読み込みが失敗するため、このコード行は例外をスローします。Fusion アセンブリの読み込みメッセージを確認すると、次のように表示されます。
問題は、DLLが に存在しc:\Deploy\bin\Platform.DLL
、適切なバージョンがあり、署名された公開鍵がないことです。
私が考えた
こと: 1. たぶん、本当に Platform.DLL の依存関係が壊れていて、この動作を引き起こしているのでしょうか? (Reflector で依存関係ツリーを追跡しましたが、欠落している DLL は見つかりませんでした)
2. リリース/デバッグの不一致、または 64 ビットと 32 ビットの違いがあるのでしょうか? しかし、すべてが同じマシン上に構築されました
。このログに「成功」メッセージも「失敗」メッセージも表示されません。例外のために失敗したことはわかっています。
PS 技術詳細:
マシン環境は Windows 2008 64 ビットで、.NET 2.0、3.0、および 3.5 がインストールされています。
この同じアプリケーションは別のマシン (Vista 32 ビット) で問題なく動作し、同じディレクトリ構造と DLL を使用しますが、それらはそのマシンでビルドされています。
asp.net - Fusion がバインド エラーをログに記録しないのはなぜですか?
以下をレジストリ キー Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Fusion に追加しました。
- EnableLog DWORD 1
- LogFailures DWORD 1
Visual Studio から ASP.NET Web サイトを開始すると、パーサー エラーがスローされます。
ファイルまたはアセンブリ 'CMS.Controls, Version=4.1.3518.21577, Culture=neutral, PublicKeyToken=834b12a258f213f9' またはその依存関係の 1 つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。(HRESULT からの例外: 0x80131040)
Assembly Binding Log Viewer を更新または再起動すると、空になります。このエラーをログに記録するべきではありませんか?
DWORD ForceLog 1 をレジストリに追加した場合にのみ、エラーがログに記録されます。しかし、成功したすべてのバインディングでログがいっぱいになり、名前でソートされないため、リストでエラーを見つけるのが難しくなります。
ありがとう!