質問

私は2つのバージョンが、「通常のユーザ」バージョンと「プロ」バージョンでマネージコード(ほとんどはC ++ / CLI)でツールを構築しています。

コアコードは、2つのバージョン間の同一であるという事実は、私が単一のアセンブリ(DLL)として結果のツールをパッケージ化すると、ほとんどのトラブルを引き起こしていると私はする.cppファイルをインクルードする必要がありますする必要はありませんツールの2つのバージョンのプロジェクトで共通のコードのために。私はむしろ共通のコードに依存し、必要に応じてそれをリンクする共通のコードのためのプロジェクトやツールの各バージョンのプロジェクトを持っているとツールプロジェクトの各バージョンを持っていると思います。

アンマネージドC ++では、私は静的ライブラリで共通のコードを配置し、それへのツールの両方のバージョンをリンクすることにより、これを行うと思います。私は、これはC ++ / CLIで動作するように取得することができていないようです。それは私がDLLアセンブリに共通のコードをビルドすることを余儀なくしていると私は希望よりも、それは多くのDLLのにつながると思われます。

だから、要約すると、私は1つのプロジェクトで共通のコードを構築し、双方が共通のコードが含まれる2つのDLLアセンブリを生成するために、最終製品の各プロジェクトでそれをリンクする方法を考え出すことはできません。

私はおそらく何か間違ったことをやっているが、私は何本使ってnetmodulesとを行う方法を動作するようにしようと、私はちょうどそれを動作させることができませんでした。最後に、私はそれが働いてしまった唯一の方法は、共通のコードアセンブリのビルド製品ではなく、ハックのIMHOのビットを動作しますが、ある結果をリンクにリンカーに指示しました。

とにかく、誰もが、私はこの問題を解決すべきかについての提案を持っているのですか?

編集の私は、おそらく、生産アセンブリとはかなり一般的であるように私は、生成されたアセンブリは100%のコードを管理されていない、彼らはマネージコードとアンマネージコードが混在しているという事実を言及している必要がありますねC ++での/ CLI ...

役に立ちましたか?

解決

あなたはすべてのDLLでイライラしている場合は、ダウンロード<のhref =「http://www.microsoft.com/Downloads/details.aspx?familyid=22914587-B4AD-4EAE-87CF-B14AE6A939B0&displaylang=en」のrel = "noreferrer" タイトル= "ILMerge"> ILMerge を。私は私のクライアントのための使いやすい.EXEに一緒に複数のDLLのバンドルするためにこれを使用します。

他のヒント

あなたは、DLL年代の多くのいくつかのexeファイルをbundeling場合ILmergeは個人的に、一つの方法です言ったように私はネッツを好みますに。

あなたはモジュールを使用することができます。あなたはal.exe、アセンブリリンカを使用してアセンブリにそれらをリンクすることができます。

私はこれを正しく理解していた場合は、

は、次の2つのプロジェクトを含むソリューションを持っています。 「通常の」ユーザーと「プロ」ユーザーのための1つのプロジェクトのためのプロジェクト。 Visual Studioは、あなたが別のプロジェクトから別のファイルソースへの「リンク」を追加することができます。あなたの「プロ」バージョンは、実際のコアコードファイルを持っており、既存の追加「ノーマル」バージョンにした場合 - >「プロ」プロジェクト内のファイルを見つけ、[追加]ボタンで下向き矢印をクリックし、[リンクとして追加」を選択」。今、あなたは文字通り二つのプロジェクト間で同じである1つのファイルを持っています。

これは、.NETコンパイルプロセスの欠点は、あなたが静的ライブラリと一緒にそれらを保持するヘッダファイルのようなものを持つことができないのです、すべてが一つの大きなdllファイルと情報を共有するための唯一の方法で保持されているいずれかで構築することです共通DLLと他のアセンブリから参照または(おそらくプロジェクト間のファイルの.csリンク/コピーして)各DLLでコードを複製します。

第二の方法は、彼らが同じ名前を持っているにもかかわらず、さまざまなタイプを宣言することに注意してください。これは、リモート処理(またはプロセス間の特定の共有インタフェースにキャストする必要が何でも)のようなものとお尻であなたを噛まされます。

Remotesoftサラマンダーのあなたをフックアップします。それは基本的にネイティブコンパイラとリンカのです。

モノ(またはCygwinはオプションである)を使用する場合 mkbundleするもよいです有効な選択肢となります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top