問題タブ [ildasm]
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.
clickonce - clickoncewpfアプリのsetup.exeリソース文字列を編集する自動化されたプロセス
YバージョンのZゾーン全体でN人の顧客向けに展開される妥当なサイズのアプリケーションがあります。これらの状況のそれぞれについて、WCFサービスURLに対応する各クリックワンスURLはすべて異なります。
展開/更新が必要になるまで、これらがどうなるかはわかりません。これは現時点では非常に手動のプロセスです。
ソリューションの構築、アセンブリバージョンの更新、クリックワンスクライアント構成の更新、正しいURL再署名クリックアプリセットアップサービス(URL、構成など)のデプロイ
私たちはこのプロセスを自動化し、この中で多くの時間とエラーを解放しようとしています。私たちのアプローチは、すべてのcommit builda汎用バージョンであり、バージョン番号ごとにアーティファクトとしてアーカイブします(クライアントのバージョン番号を自動的にインクリメントし、アプリ全体、クライアント、サーバー、dbスクリプトなどをそのバージョン番号で保存します)。これは、ビジネスがUATバージョンXを使用していると言うことができ、それが稼働することを喜んでいることを意味します。
私は、アーカイブ、変換の構成などを行う自動ツールを作成してから、クライアントアプリに再署名する作業を行っています。次に、クリックすると、更新が必要なリソースを含むsetup.exeが作成されることに気付きました。たとえば、名前が変更されたり、URLが変更されたりします。
このsetup.exeを取得し、自動化された/コマンドライン/ C#の方法でリソース文字列を変更する方法を見つけようとしています。
ildasmを試しましたが、「エラー:setup.exeに有効なCLRヘッダーがなく、逆アセンブルできません」と表示されません。
このリソースを編集したり、アプリの汎用バージョンを作成して、新しい要件ごとにカスタマイズしたりできるようにする方法はどれも素晴らしいことです。
ildasm - ILDASMツリービューのフィールドの順序は正しいですか、それともMetaInfoの順序は正しいですか?
.NET値型のフィールドの正確な順序を決定する際に、ILDASMツリービューとILDASM「MetaInfo」(つまり、実際のIL)の両方を調べました。データの2つのビューのフィールドの順序は逆です。
たとえば、System.Runtime.InteropServices.FILETIMEのツリービューには、dwLowDateTimeの前にdwHighDateTimeが一覧表示されます。(私は画像を投稿しますが、そうするのに十分な評判ポイントがここにありません)。
一方、View >> MetaInfo >> Show!を使用した対応するILは次のとおりです。ILDASMで:
TypeDef#1655(02000678)
正しい順序はどれですか?ILは正しいと思いますが、確認をお願いします。この格差の理由を知っている人はいますか?
c# - 異なるマシン上で同じ C# ソース コードから反復可能なビルド
私は、異なる時点で 2 つの別々のマシンでコンパイルされた同一の C# コードによって生成されたリリース バージョンのバイナリをプログラムで調べて、コードが同一であると結論付けるのに十分スマートなツールを生成しようとしています。これらのバイナリを生成するために使用される c# コード。
私は多くのアプローチを使用してみましたが、これを短く保つために、最新の試みに固執します. バイナリで /text オプションを指定して ildasm を実行し、匿名フィールドなどの GUID をテキストに置き換えますが、バイナリが別の PC からのものである場合、ILDASM の /text オプションによって生成されたテキストが並べ替えられていることがわかります。同じコードに由来するが、異なるマシンで同じセットアップによってコンパイルされたバイナリも、大幅に並べ替えられているように見えます。この IL の並べ替えをどのように制御できるかについての提案をいただければ幸いです。
乾杯
PS: これを確実に達成するための代替戦略も大歓迎です。
c# - CLRメタデータTypeDefテーブル数
次のコードを検討してください。
csc.exeでコンパイルした後、ILDasmを使用してアセンブリを開き、理解できないものを見つけました。
ILDasm「ショー!」コマンドは単一のTypeDef(「プログラム」クラス)のみを表示しますが、統計ビューでTypeDefカウントが2であることがわかります。
2番目のタイプがどこから来たのか考えていますか?
出典:ジェフリー・リッチターの39ページからの本「CLRviaC#」第3版。
asp.net - dll を参照するものを見つける
次のエラーを解決しました。
System.IO.FileLoadException: ファイルまたはアセンブリ 'Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' またはその依存関係の 1 つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。
奇妙なことに、少し断続的でしたが、リリースビルドを作成したときにのみ問題のように見えました.デバッグビルドを作成すると、問題が一時的に解消される場合がありました.
プロジェクト Microsoft.Practices.EnterpriseLibrary.Data.dll に、使用されていないエンタープライズ ライブラリ dll があり、バージョン 5.0.505.0 であり、Microsoft の v. 5.0.505.0 を取り込もうとしていたようです。 .Practices.EnterpriseLibrary.Common、この 'Common' dll の v. 5.0.414.0 が既にプロジェクトにあった場合。これが主にリリース モードで発生している理由を特定しませんでした。
これを追跡し、原因を明確に特定するのに役立つ何かは、どの dll が私の Visual Studio プロジェクトに別の dll をプルしているかを特定することでしたか? 問題の原因となっている dll から移動して、どの dll に含まれているかを確認したいと考えています。この答え:
Visual Studio が DLL を bin ディレクトリにコピーすることを決定する理由を調べる
ildasm またはリフレクターを使用できるとのことですが、これらのツールを使用して何をどのように探す必要がありますか? これをグーグルで検索しましたが、何も表示されませんでした。
ちなみに、リリースモードに切り替えると問題が発生する理由についてのアイデアはありますか? これを行うと、Visual Studio が Microsoft.Practices.EnterpriseLibrary.Common のリリース バージョンをどこかからプルしようとしたのではないかと思いましたが、それは間違ったバージョンですが、これは「サード パーティ」であるため、私には意味がありません (Microsoft ) 既にリリース モードになっているライブラリの場合、間欠性については説明されておらず、個々のプロジェクトをリリース モードに切り替えると外部ライブラリへの参照に影響する理由がわかりません。
c# - g.resources ファイルをアセンブリに挿入する方法
1 つのリソースを変更するアセンブリを変更する必要があります。既にリソースを抽出して変更しましたが、アセンブリに再度埋め込む方法が見つかりません。ildasm を試してみましたが、.res リソース ファイルが必要なようで、xxx.g.resources ファイルしかありません。
何か案は?
ありがとう
c# - .NET のバージョン/環境に関係なく、ildasm.exe および ilasm.exe ファイルのファイルパスを見つける確実な方法は?
ildasm.exe/ilasm.exe 実行可能ファイルの FileInfo/Path をプログラムで取得する方法はありますか? dll / exeファイルにいくつかの変更を加えた後、適切に逆コンパイルして再コンパイルしようとしています(PostSharpはコンパイル後にILを変更するのと同様のことをしていると思います)。
次のようなブログ投稿を見つけました。
ただし、このコードを実行したときにディレクトリが存在しなかったため (主に SDK のバージョンが 7.1 であるため)、ローカル マシンの正しいパスは@"Microsoft SDKs\Windows\v7.1\bin"
. ildasm.exe を実際に見つけられるようにするにはどうすればよいですか?
同様に、ilasm.exe にアクセスする方法に関する別のブログ投稿を次のように見つけました。
これが機能している間、Framework と Framework64 があり、Framework 自体に v4.0.30319 (Framework64 と同じ) までのすべてのバージョンがあることに気付きました。では、どちらを使用するかをどのように知ることができますか? 対象としている .NET Framework のバージョンに基づく必要がありますか?
概要:
- ildasm.exe への正しいパスを見つけることを適切に保証するにはどうすればよいですか?
- コンパイルする正しい ilasm.exe を適切に選択するにはどうすればよいですか?
c# - Powershellが.Net上に構築されている場合、C#コードの代わりにスクリプトを作成する理由は何ですか?
Powershellを初めて使用する人として、私はある時点で100%明確ではありません。
もしも
「PowerShellでは、管理タスクは通常 、特定の操作を実装する特殊な.NETクラスであるコマンドレット(コマンドレットと発音)によって実行されます。」
それらのクラスで.Net実行可能ファイルを記述してコンソールアプリケーションとしてコンパイルする代わりに、スクリプトを作成する理由は何ですか?
.net - アセンブリの再コンパイルとアセンブリの負荷の問題
実行可能ファイル(Foo.exe)とライブラリBar.dllがあります。両方のバイナリは厳密な名前で署名されていません。Bar.dllライブラリは実行可能ファイルに依存しており、マニフェストで次のように指定されています。
ildasmとilasmを使用してFoo.exe->msil->Foo.exeからラウンドトリップします。ildasmを使用して逆コンパイルすると、単一の.ilファイル、.resファイル、および複数の.resourcesファイルが生成されます。私はそのような方法でアプリケーションを再コンパイルします:
再コンパイル後、アプリケーションは機能し、起動できます。問題は、実行可能ファイルに依存するライブラリBar.dllが、再コンパイル後にロードに失敗することです(Foo.exe実行可能ファイル)。これは、融合ログが私に与えるものです:
再コンパイルの前に、ファイルは正常にロードされ、フュージョンログの唯一の違いは最後の4行です。
c# - ILDASM は、アセンブリと型のメタデータとは別に、.JPG、.XML、.txt ファイルをどこに表示しますか?
アセンブリとタイプのメタデータとは別に、ILDASM が (プロジェクトに追加された) .JPG、.XML、.txt ファイルを表示する場所を教えてください。