問題タブ [fody-costura]
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 - wpfアセンブリをマージできるツールのような無料のilmergeはありますか?
すべてのwpfアプリケーションのアセンブリを1つのアセンブリにマージするための無料のツールを探しています。通常、ILMergeを使用しますが、残念ながら、WPFアセンブリのマージはサポートされていません。それを達成できるツールはありますか?
アプリケーションはオープンソースプロジェクトであるため、商用ツールは私にとってオプションではありません。
よろしく、
オリバーハナッピ
c# - 静的コンストラクターは同じappdomainで2回呼び出されますか?
この質問は、log4netよりもC#に関するものです(私は思います)。
カスタムアペンダーを作成し、プログラムによって以前に設定された静的フィールドを読み取らせました。
驚いたことに、静的フィールドが再初期化され、設定値がアペンダーに到達しませんでした。
debugviewを起動すると、静的コンストラクターが2回呼び出されることがわかりました(!)。これは同じappdomainでは不可能なはずですよね?VSがブレークポイントで2回ヒットしなかったため、debugviewのみがこれを明らかにしました。
これは、log4netでの静的変数の使用を回避することについての質問ではないことに注意してください。これを実現するためにlog4netがどのような魔法を使用するのか興味がありますか?
編集#1
こんにちはジョン、大ファン。
要求に応じてさらに分離しました。最初に私は空白から始めて、エラーを明らかにするターゲットの状況に向かって取り組みました。対象のキャラクターをキャラクターごとにほぼ一致させても再現しなかったので、逆に行きました。
エラーの状況から始めて、私はそれが始まるまで私が本質的でないと思ったすべてを取り除きました...期待通りに働きました。
ランタイムがlog4netアセンブリを解決しようとすると、奇妙なことが起こっているようです(デバッグモードで観察されたように)
これは私がdebugviewで見るものです:
[7756]一般:警告-モジュールの「log4net」バージョンの解析に失敗しました。例外:System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。[7756] at DebuggerShared.Services.EventArgs.ModuleLoadedInDebuggerEventArgs..ctor(String modulePath、String moduleLoadMessage、Boolean isUserCode、String name、String version)[7756]一般:警告-モジュールの「FollowUp.Common」バージョンの解析に失敗しました。例外:System.NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません。[7756] DebuggerShared.Services.EventArgs.ModuleLoadedInDebuggerEventArgs..ctor(String modulePath、String moduleLoadMessage、Boolean isUserCode、String name、String version)
また、VSはデバッグモジュール画面にパスの値を表示しません。どうやってそのような状況にたどり着いたのでしょうか。アセンブリをロードできたのに、どこからかわからなくなったのは不思議です:)
これは、さらに変更すると期待どおりに機能し始めるという孤立した状況です。
https://www.sugarsync.com/pf/D6486369_1701716_00940
私はまだ技術的な詳細に興味がありますが、log4netへの参照を削除して再度追加した後、すべてが再び機能し始めました。私はそれがうまくいくことを嬉しく思います、しかしそれは私が完全な説明を持っていないことを私に悩ませます
また、静的コンストラクターが2回呼び出されるようになりました。これは、log4netが取得したときに型が再び初期化されるため、意味があります。
この原因にもっと時間を費やすことは価値がないと思います。解決策は奇妙な状態にあり、これらすべてを理解することには限界的な価値があると思います。それでも、これを説明する何かを考えることができれば、私はここに喜んでいるでしょう。
編集#2
静的コンストラクターを含むいくつかのアセンブリが実際に2回ロードされたことが判明しました。これがどのように可能であるかは後で調査しますが、Costuraを無効にしてから有効にすることで回避策があります。Costuraは、すべてのアセンブリを1つにマージするmsbuildタスクです。コスチュラが根本的な原因だと言っているのではありません。csproj/slnファイルが奇妙な状態にあった可能性があります。
将来、この問題をより迅速に診断する方法を考えて、sysinternalsProcessExplorerを起動しました。アセンブリが1回だけロードされることを期待していましたが、2回ロードされていることがわかりました。これは、.NET4でのみ修正されたランタイムのバグのようです。
http://forum.sysinternals.com/why-some-net-assemblies-are-duplicated-in-memory_topic15279.html https://connect.microsoft.com/VisualStudio/feedback/details/467560/clr-maps-assemblies -into-the-virtual-address-space-twice
編集#3 Costuraは、アセンブリを2回ロードしました。この問題は、プロジェクトの所有者によって同じ日に修正されました:) http://code.google.com/p/costura/issues/detail?id=17&thanks=17&ts=1328826304
Costuraタグが必要ですが、必要な1500レピュテーションポイントがありません。権利があれば作成してください。ありがとう。
よろしく、トム
.net - .NETマージクラスライブラリリファレンス
WPFユーザーコントロールを含むクラスライブラリがあります。このライブラリにはいくつかの依存関係がありますが、1つのアセンブリとしてデプロイしたいと思います。私が知っているように、IlMergeにはWPFに関するいくつかの問題があります。Costuraを試しましたが、アプリケーションでのみ機能し、クラスライブラリでは機能しません(ここで確認しました)。私の目標を達成する方法はありますか?
.net - app.config をアセンブリに埋め込む
結果のアセンブリに app.config ファイルを埋め込む既存のソリューションはありますか? DLL をアセンブリに埋め込むためのcosturaがあることは知っています (costura は、非常に優れた VS プラグインも提供します!)
app.config の同等のプロジェクトですか?
.net - ILMerge / Costuraを使用してアセンブリを結合した後、VS(2010)でPDBを受け入れる方法はありますか?
ローカライズされたアプリケーションを持っていてスタンドアロンEXEを提供する必要がある人は誰でもこの問題を抱えているため、この質問は私自身の場合を超えて適切です-彼らはILMerge(またはCosturaまたはいくつかの自作ソリューション)を使用してローカリゼーションDLL(または他のアセンブリ)を配置したいと思うでしょう)EXEに追加しますが、一度実行すると、コードをデバッグできなくなります。VSデバッガーは、元のEXE用に生成された元のPDBファイルの受け入れを拒否します。これは、おそらくILMergeステップがチェックサムを更新するかGUIDを変更するためです。
私が疑問に思うのは、これを回避する方法があるかどうかです..ほとんど知られていないILMergeオプションのように、多分?それは、デバッグ能力の非常に一般的で不必要な喪失として私を襲います。
ローカリゼーション後にこのようなアプリをデバッグする他の唯一の方法は、ローカリゼーションコード自体をデバッグする場合を除いて、ILMergedを解除したDLLを使用する並列ビルドオプションを維持することです。これは問題ありません(たとえば、私)。 。その後、あなたは本当に運が悪いです。誰か他のオプションを考えることができますか?
Costuraも使用してみましたが、ローカリゼーションDLLにはすべて同じ名前の(メインリソースのAppName.resourceと同じ)リソースが含まれているため、そのようなDLLを参照に追加できるのは1つだけです。それ以降のDLLは許可されません。Costuraをギミックして機能させる方法はありますか?(ただし、動作させることができれば、組み合わせはVisual Studioビルドの一部であるため、PDBの問題は発生しない可能性があります。.?)
編集:PDB/EXEの一致をもたらすアイデアを探しています。16進エディタでpdbをハックできることを理解しています。ただし、この質問では、システムを意図したとおりに機能させる方法について具体的に尋ねています。
c# - Fody/Costura の問題
はじめに:私は完全な初心者です。1 つのソリューションに 2 つのプロジェクトがあります。1 つのプロジェクトは、Windows フォーム アプリケーションから呼び出されるコンソール アプリケーションです。これらを 1 つの実行可能ファイルに追加します。Fody/Costuraで可能だと言われました。それをダウンロードして、IncludeAssemblies コードを xml ファイルに追加しました。ただし、デバッグ フォルダーに移動すると、まだ 2 つの実行可能ファイルが別々に残っています (いくつかの新しく生成されたファイルは別として)。
c# - Fody/Costura が Interop DLL を埋め込まないのはなぜですか?
Costura.Fody を使用して、参照される DLL をリソースとして EXE に埋め込みます。Interop.IWshRuntimeLibrary.dll を埋め込んでいないことを除けば、正常に動作します。
どうすればその理由を知ることができますか?
ILSpy を使用して EXE を調べています。これにより、IWshRuntimeLibrary を除くすべての参照がリソースとして埋め込まれていることがわかります。さらに、ユーザーが IWshRuntimeLibrary に関する例外を受け取っているという事実。
「ローカルにコピー」は、IWshRuntimeLibrary への参照に対して True です。
CorFlags によると、Interop.IWshRuntimeLibrary.dll の ILONLY = 1 です。これは、DLL が純粋なマネージ コード (ネイティブ モードまたは混合モードではない) であることを意味すると思います。
Fody バージョン 1.26.1 と Costura.Fody バージョン 1.3.2.0 (最新の NuGet パッケージ) を使用しています。
アップデート
IncludeAssemblies オプションを使用して、明示的に Interop.IWshRuntimeLibrary の埋め込みを強制しようとしましたが、効果はありませんでした。また、存在しない偽のアセンブリを指定しようとしましたが、ビルド出力にエラーや言及はありませんでした。
c# - Fody: 未処理の例外が発生しました
プロジェクトをビルドしようとすると、突然例外が発生します。Mono.Cecil と関係があるようです。しかし、私のプロジェクトでは Mono を使用していません。
Fehler 13 Fody: 未処理の例外が発生しました: Exception: Die Datei または Assembly "Mono.Cecil, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756" orer eine Abhängigkeit davon wurde nicht gefunden. Die gefundene Manifestdefinition der Assembly stimmt nicht mit dem Assemblyverweis überein. (Ausnahme von HRESULT: 0x80131040) StackTrace: System.Signature.GetSignature(Void* pCorSig, Int32 cCorSig, RuntimeFieldHandleInternal fieldHandle, IRuntimeMethodInfo methodHandle, RuntimeType declaringType) System.Reflection.RuntimeMethodInfo.FetchNonReturnParameters() System.Reflection.RuntimeMethodInfo.GetParametersNoCopy () bei System.Reflection.RuntimePropertyInfo.GetIndexParametersNoCopy()
System.Reflection.RuntimePropertyInfo.GetIndexParameters() System.RuntimeType.GetPropertyCandidates(String name, BindingFlags bindingAttr, Type[] types, Boolean allowPrefixLookup) System.RuntimeType.GetPropertyImpl(String name, BindingFlags bindingAttr, Binder バインダー, Type returnType, Type[] 型、ParameterModifier[] 修飾子) System.Type.GetProperty(文字列名、BindingFlags bindingAttr、バインダー バインダー、型 returnType、Type[] 型、ParameterModifier[] 修飾子)、PropertyDelegateBuilder.BuildPropertySetDelegate[T](型型、 c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\DelegateBuilders\PropertyDelegateBuilder.cs:Zeile の文字列 propertyName) 9. c の DelegateBuilder.BuildDelegateHolder(Type weaverType):\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\DelegateBuilders\DelegateBuilder.cs:Zeile 25. bei DelegateBuilder.GetDelegateHolderFromCache(Type weaverType) in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\DelegateBuilders\DelegateBuilder.cs: . bei InnerWeaver.InitialiseWeavers(List`1 weaverInstances) in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\InnerWeaver.cs:Zeile 65. bei InnerWeaver.Execute() in c:\TeamCity\buildAgent\work\7495521761d392b9\ FodyIsolated\InnerWeaver.cs:Zeile 30. ソース: mscorlib TargetSite: Void GetSignature(Void*, Int32, System.RuntimeFieldHandleInternal, System.IRuntimeMethodInfo, System.RuntimeType)\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\DelegateBuilders\DelegateBuilder.cs:Zeile 16. InnerWeaver.InitialiseWeavers(List`1 weaverInstances) in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\InnerWeaver.cs:Zeile 6.5 . bei InnerWeaver.Execute() in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\InnerWeaver.cs:Zeile 30. ソース: mscorlib TargetSite: Void GetSignature(Void*, Int32, System.RuntimeFieldHandleInternal, System.IRuntimeMethodInfo, System .RuntimeType)\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\DelegateBuilders\DelegateBuilder.cs:Zeile 16. InnerWeaver.InitialiseWeavers(List`1 weaverInstances) in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\InnerWeaver.cs:Zeile 6.5 . bei InnerWeaver.Execute() in c:\TeamCity\buildAgent\work\7495521761d392b9\FodyIsolated\InnerWeaver.cs:Zeile 30. ソース: mscorlib TargetSite: Void GetSignature(Void*, Int32, System.RuntimeFieldHandleInternal, System.IRuntimeMethodInfo, System .RuntimeType)Void GetSignature(Void*, Int32, System.RuntimeFieldHandleInternal, System.IRuntimeMethodInfo, System.RuntimeType)Void GetSignature(Void*, Int32, System.RuntimeFieldHandleInternal, System.IRuntimeMethodInfo, System.RuntimeType)
何か案は?Costura.Fody パッケージを再インストールしようとしました。
c# - 重複したアセンブリの埋め込み
Costura で次の問題が発生しています。<IncludeAssemblies> タグを使用して埋め込むアセンブリのリストを提供すると、重複が発生します。具体的には、Jetbrains.Annotations アセンブリが複製されます。他のすべてのアセンブリは、一度だけ埋め込まれます。
ビルド中の Costura の出力と、DotPeek を使用して生成されたターゲット アセンブリのリソースを調べることができます。
埋め込みの「デフォルト」モードを使用しても、この問題は発生しません。残念ながら、アセンブリの 1 つが含まれていない相互運用機能であるため (Embed Interop Types = false および Copy Local = true を使用)、「既定」モードを使用できません。
何か案は?
前もって感謝します。
c# - 使用しなくなった fody-costura から .dll を削除します
しばらく前にインストールしInstall-Package Costura.Fody
ましたが、インストールしたときは 3 つの .dll を使用していましたが、アプリケーションを変更したため、これらの .dll を使用できなくなりました。bin フォルダーから 3 つの dll を削除し、それらを参照から削除しました。しかし、プロジェクトをビルドするときはいつでも、Costura.Fody にこれらの .dll が含まれます。どうすればこれを変更できますか?