2009-03-20 14 views
70

多くの人が、おそらくJoel Spolskyという最も人気のあるブログ記事のうちの1つに馴染んでいます。Please Sir, May I Have a Linkerスタンドアロンアプリケーションを開発して販売できるように、.NETフレームワークの依存関係を削除します。.NETアプリケーション用リンカの状態

Visual Studio開発チームのJason Zanderは、トピックが多少疑問であると主張し、実行時のセキュリティ問題(他の点など)を修正する機能が主な関心事であると主張しました。全体として、小さなオーバーヘッドはそれに値するものでした。

2009年に早送りしました。現在、C#リンカーを持っていると主張するグループがいくつかあります。 (ジェイソン・ザンダー氏は、それを実装するのにはあまり時間がかからないと言っていました。)かわいそうな.NET 1.0のダウンロードではなく、200-300Mbのクロスプラットフォーム完全.NET 3.5インストーラx86、x64、およびia64用の.NETのバージョンが含まれています。実行時のサイズを小さくするために、Microsoftの提案が含まれます:

  • 開梱を再配布可能な、あなたはしたくないのターゲットプラットフォームを削除し、戻って一緒にそれを置く
  • のみを使用し、ご使用のプラットフォーム
  • のためのライブラリをダウンロードするWebブートストラップ
  • ライブラリを制限し、唯一の私はそれを理解し、さらに悪いことにはx86の

のために働くました(2008年後半のような新しい)クライアントプロファイルのインストーラ(私が間違っている場合は、私を修正してください)クライアントを使用して、プロファイルは、ウィンドウに登録しなくても.NET 3.5がインストールされている。これは、複数の.NET 3.5クライアントアプリケーションがコンピュータにインストールされている場合、お互いが見えず、ランタイムが何度も再インストールされることを意味します。

Microsoftがここで考えていることは本当にわかりません。最悪の場合は、1つのターゲットプラットフォーム(x64など)にインストールし、それらのライブラリのみをインクルードする必要があると仮定しても、アプリケーションのオーバーヘッドは60メガバイト以上になります。最もよく知られている.NETアプリケーションの1つであるPaint.NETには、Difficulties installing the application because of the massive .NET dependencies.が含まれていました。無料アプリの配布に問題がある場合、他の世界はどうですか?彼らは自分のアプリケーションをインストールする前に、最後にMake a bootstrapper that installed Microsoft Installer 3.1, the .NET runtime bootstrapper, and all their other dependent librairesにしなければなりませんでした。

それではどうですか?リンカー。優れたものが存在するのか、ユーザーが大規模な.NETランタイムをインストールすることなくC#アプリケーションを構築することができるだけのツールですか?

モノ::

  • Mono has its own linker

    更新:オプションのカップルがありますようなので、それが見えます。下の答えから、それはかなりうまくいくように見えます。

.NET:

モノツールが使用されているようです。 .NETベースのツールはどうですか?それ以外の経験や、マイクロソフトが3.5を全員に公開するのを待たなければならないのでしょうか?私は、.NET 4.0がどれくらいの時間がかかっているかを考えるのが嫌です...

+0

IE 8. No install required.よう

そして、彼らはあなたがダウンロードすることができます偉大なデモを持って、ILMergeはそれを行うオプションを持っていませんか? – configurator

+0

あなたはとても正しいです!マイクロソフトのwebcamドライバ(42Mそれ自体)のインストーラはWebに行き、.NET 3.0をダウンロードしました。1.5M ADSLで10分以上かかりました...私には何が求められていますか?ウェブカメラのみを使用する... –

+0

Itnマイクロソフトが.NET 3.5を全員に押しつけるのにそれほど時間をかけずにいれば、それほど悪くない。 .NET 2.0のように最新のサービスパックに含まれていれば、ほとんどの人はこのナンセンスに対処する必要はありません。 –

答えて

49

Mono Linkerの場合です。

ここに記載されている他のソフトウェアについてはほとんど話すことができませんが、Mono Linkerの作成者として、私はそれが何で、何がないのかを知ることができます。

Monoリンカは管理されたリンカに過ぎないため、定義上、アセンブリを取り、プログラムを実行するために必要でないものを削除します。アセンブリをまとめてマージするのではなく、ネイティブプログラムを作成しません。

ILMergeのMono.Mergeクローンがありますが、完全ではなく、作者はそれを維持していません。 Monoランタイムとアセンブリの両方を含むネイティブプログラムを生成するために、Monoはmkbundle toolを提供します。

また、アセンブリを変更するのは管理ツールだけなので、厳密な名前付きアセンブリを指定し、それらに署名する秘密キーがないと、アセンブリを実行する際に問題が発生します。

私は、リンカに関するブログ記事のカップルを書いた:リンカと私たちの経験について

を。リンカーは現在、Monoプロジェクトの2つの部分で使用されています。これは、C#コンパイラMono.CSharp.dllを埋め込むために配布するアセンブリを生成するために使用されます。 PDCでMiguel's presentationを見ることができます。これは、PDCの仕組みを説明しています。これはかなり簡単で、カスタマイズ可能なツールであるリンカの基本的な使い方です。カスタムステップを書くのはかなり簡単です。

リンカーのより複雑な使用方法はwe create our Moonlight assembliesです。 MoonlightはSilverlightの実装で、このアセンブリはデスクトップアセンブリのサブセットです。そのため、デスクトップアセンブリをリンクしてサイズを縮小し、カスタムステップを使用して、パブリックAPIをSilverlightに合わせて変換しています。

そうですね、リンカのコマンドラインインターフェイスや、実際にあなたが何をやっているか知っていなければならないか、奇妙なアセンブリに終わるかもしれませんが、すべてで、それは私たちのために本当にうまく動作します。

+22

+10モノラルリンカを書いています。 –

+2

リンカは、Appleが(バイトコード)インタプリタと仮想マシンのインストールを許可しないiphone –

+6

Matthew:そうですね。リンカは、最終アプリケーションのサイズを縮小するためにMonoTouchで使用されます。 JITの制限を迂回するのはAOTコンパイラです –

2

これは、.NET Rocksで長いこと前に聞いた主なものです。私は本当に

http://www.remotesoft.com/linker/

+0

リンクが死んでいるようです。 – Simon

+0

私はそれを試しました。それは私のためにうまくいった。 –

+0

リンクは有効です。コストは1249ドルです。私はそれがネット税だと思います。私たちはウェブベースになってうれしいです。 –

5

FWIW

モノはかなりしばらくの間、had a linkerを持っているのに、それを試して変更をやったことがなかったです。

ここにはmkbundleの使用方法のexampleがあります。

+0

リンカのように良い:)、それはここでは特定の問題を解決しません。 Monoのリンカは管理されたリンカであり、管理されたアセンブリでのみ動作します。 –

+0

さて、mkbundle - http://linux.die.net/man/1/mkbundleをチェックしてください。 – supercheetah

+0

sambo99、これまでの経験はありますか? –

2

はそれを使ったことがない、私はあなたが.NET Reactor

3

クライアントのプロファイルと同様のことを行うことができます聞いたWindowsに登録しますが、特別な方法であなたが唯一のクライアントプロファイルでマシンを混同したくないので、完全な.NET 3.5

クライアントプロファイルを持つマシン:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\DotNetClient\v3.5\Install 

完全な.NET 3.5:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v3.5\Install 
2

彼はその記事を書いた前に、私はarguing (under my pen name "Mr Analogy")しばらくの間、ジョエルのフォーラムで、リンカが必要でした。リンカーの増殖は私の懸念を正当化したようです(悲しいことに)。私が話した人々から

http://www.thinstall.com/

、それはかなりよく考えています、私は、ライセンスをチェックし、最後が(/アプリのライセンスあたり年間$ 2kの)面倒でした。彼らは、開発者ではなくITショップをターゲットにしているようです。あなたが自分のサイトで価格を見つけることができないという事実は、それが高価だと(私に)示唆している。

5

http://www.xenocode.com/

これは、我々が使用しているものです。これまでのところ、1年後や多少限定された使用(おそらく野生では500回の設置)には問題はありません。

これはかなり合理的な価格です。彼らはさらに高価な完全仮想化ソフトウェア(あなたのアプリを他のアプリやO/Sに束ねる)を持っています。しかし、私たちはそのすべてを必要としませんでした。 1年ほど前の私たちのコストは400ドルでした。私はそれがもう少し高価だと思いますが、Thinstallよりはるかに少ないと思います。

関連する問題