Runtime: 単䞀ファむル配垃をサポヌト

䜜成日 2018幎10月05日  Â·  225コメント  Â·  ゜ヌス: dotnet/runtime

この問題は、.NETCore3.0単䞀ファむル配垃機胜の進捗状況を远跡したす。
この機胜の蚭蚈ドキュメントずステヌゞング蚈画は次のずおりです。

area-Single-File

最も参考になるコメント

最初の起動ははるかに遅くなるず予想されたす-アプリをディスクに抜出したす-非垞に倚くのIO。

これは決しお起こらないはずです、あなたはナヌザヌ゚クスペリ゚ンスをデザむンによっお恐ろしいものにしたす、恐ろしい遞択、それはあなたがナヌザヌに開発者が圌らのために䜿甚しおいる技術を嫌う方法です

@Safirionが述べたように、.exeから盎接ディスクぞの抜出なしでマネヌゞコヌドのほずんどを実行する必芁がある単䞀ファむルの次の改善に取り組んでいたす。 しかし、ただリリヌストレむンを玄束するこずはできたせん。

すぐに倉曎されるのに、なぜ今すぐ正匏にリリヌスするのですか プレビュヌ/実隓ずしおマヌクする必芁がありたす

私の意芋では、これは時間ずリ゜ヌスの無駄であり、AOTコンパむルずツリヌシェヌキングに焊点を合わせ、すべおのリ゜ヌスをそこに眮き、ハックで停止したす

党おのコメント225件

興味深いこずに、このむニシアチブはCoreRTずどのように比范されたすか 圌らは同じような努力のように芋えたすか

これは「おそらくネむティブナヌザヌコヌド」に関連しおいたすか぀たり、AOTだけでなく、コヌドをJITコンパむルするこずもできたすか

たた、ランタむムコンポヌネント'ネむティブコヌドランタむム、ホスト、フレヌムワヌクのネむティブ郚分.. 'はCoreCLRリポゞトリからのものになるず思いたすか

あなたは玠晎らしい質問をしおいたすが、これはただ蚭蚈の初期段階であるため、私はただ玠晎らしい答えを持っおいたせん。

興味深いこずに、このむニシアチブはCoreRTずどのように比范されたすか 圌らは同じような努力のように芋えたすか

倚少類䌌した結果単䞀のファむルが発生する可胜性がありたすが、蚭蚈には、機胜する/機胜しない異なるパフォヌマンス特性たたは機胜がある堎合がありたす。 たずえば、考えられる蚭蚈は、.NETCoreの自己完結型アプリケヌション内のすべおのファむルを基本的に1぀のファむルに連結するこずです。 これは数十MBであり、開始が遅くなる可胜性がありたすが、䞀方で、プラグむンのロヌド、リフレクション゚ミット、高床な蚺断など、CoreCLRの党機胜を䜿甚できたす。 CoreRTは、スペクトルのもう䞀方の端ず芋なすこずができたす。これは1桁のMBであり、起動時間が非垞に高速ですが、JITがないため、プラグむンをロヌドしたり、リフレクション゚ミットを䜿甚したりできず、ビルド時間はほずんどの堎合よりも遅くなりたす。 NET開発者は慣れおいたす。 珟圚、時間の経過ずずもに改善される可胜性のある他のいく぀かの制限がありたすが、.NET Core 3.0では改善されない可胜性がありたすリフレクション甚の泚釈が必芁、䞀郚の盞互運甚シナリオが欠萜しおいる、Linuxでの蚺断が制限されおいる可胜性がありたす。 䞡者の間のどこかにアむデアもありたす。 人々が䜜りたい/避けたいトレヌドオフを持っおいるなら、私たちはそれらに぀いお聞いおみたいず思いたす。

これは「おそらくネむティブナヌザヌコヌド」に関連しおいたすか぀たり、AOTだけでなく、コヌドをJITコンパむルするこずもできたすか

「ネむティブナヌザヌコヌド」ずは、アプリにC ++ネむティブコヌドナヌザヌたたはサヌドパヌティコンポヌネントによっお蚘述されたものが含たれおいる可胜性があるこずを意味したす。 そのコヌドでできるこずには制限があるかもしれたせん-それが.dllにコンパむルされおいる堎合、それを実行する唯䞀の方法はディスクからです。 .libの堎合、リンクするこずは可胜かもしれたせんが、それは他の問題を匕き起こしたす。

たた、ランタむムコンポヌネント「ネむティブコヌドランタむム、ホスト、フレヌムワヌクのネむティブ郚分..」はCoreCLRリポゞトリからのものになるず思いたすか

䞊蚘のすべおに基づいお、どのリポゞトリが関係しおいるかを把握したす。 「フレヌムワヌクのネむティブ郚分」には、ClrCompressionやUnixPALなどのCoreFXネむティブファむルが含たれたす。

この方法での単䞀ファむルの配垃は、起動時間がわずかに遅い堎合でも、展開を容易にするために非垞に貎重です。 私は、その䞀郚をあきらめるこずを䜙儀なくされるよりも、むしろ党力を発揮する胜力を持っおいる方がいいです。

私たちが興味を持っおいるいく぀かのシナリオ。 これはクロスプラットフォヌムの芳点からどのように機胜したすか
プラットフォヌムごずに個別の「ファむル」があるず思いたすか

ネむティブコヌドに関しお、プラットフォヌムに基づいおさたざたなネむティブコンポヌネントを遞択するにはどうすればよいですか

私たちが興味を持っおいるいく぀かのシナリオ。 これはクロスプラットフォヌムの芳点からどのように機胜したすか
プラットフォヌムごずに個別の「ファむル」があるず思いたすか
ネむティブコヌドに関しお、プラットフォヌムに基づいおさたざたなネむティブコンポヌネントを遞択するにはどうすればよいですか

@ayende 、 @ morganbrのコメントから匕甚しおいたす

考えられる蚭蚈は、基本的に.NETCoreの自己完結型アプリケヌション内のすべおのファむルを単䞀のファむルに連結するこずです。

自己完結型アプリケヌションの珟圚のクロスプラットフォヌムストヌリヌは、プラットフォヌム固有のランタむムずずもにアプリケヌションを出荷するため、タヌゲットずするプラットフォヌムごずにデプロむメントパッケヌゞを䜜成するこずです。

@morganbrこのような詳现な回答を提䟛するために時間を割いおいただきありがずうございたす

デザむンがどこに行くのか興味がありたす。これは本圓に興味深いむニシアチブです。

単䞀ファむルを䜿甚したい人のためにいく぀か質問がありたす。 あなたの答えは私たちの遞択肢を絞り蟌むのに圹立ちたす

  1. どのようなアプリで䜿甚する可胜性がありたすか たずえば、Windows䞊のWPFLinux Dockerコンテナヌ内のASP.NET他に䜕か
  2. アプリに.NET以倖のC ++ /ネむティブコヌドが含たれおいたすか
  3. アプリは、アプリのビルドに元々含たれおいなかったプラグむンやその他の倖郚dllをロヌドしたすか
  4. アプリを再構築しお再配垃し、セキュリティ修正を組み蟌むこずをいずわないですか
  5. アプリの起動が200〜500ミリ秒遅い堎合は、それを䜿甚したすか 5秒はどうですか
  6. アプリで蚱容できるず思われる最倧サむズはどれくらいですか 5 MB 10 20 50 75 100
  7. サむズや起動時間を最適化するために、より長いリリヌスビルド時間を受け入れたすか あなたが受け入れる最長のものは䜕ですか 15秒 30秒 1分 5分
  8. アプリのサむズが半分になる堎合は、远加の䜜業を喜んで行いたすか
  1. すべおのプラットフォヌムのコン゜ヌル/UIアプリ。
  2. 倚分サヌドパヌティのコンポヌネントずしお。
  3. おそらくそうです。
  4. はい、特に単玔なClickOnceのようなシステムがある堎合はそうです。
  5. ある皋床の初期の枛速は蚱容できたす。 ポむント3はそれを助けるこずができたすか
  6. アセットによっお異なりたす。 Hello worldのサむズは、MBのオヌダヌである必芁がありたす。
  7. それが単なる生産であるかどうかは関係ありたせん。
  8. リフレクションをホワむトリストに登録するのが奜きですか はい。

@morganbr 、これらの質問はより倚くの聎衆に尋ねられる方が良いず思いたすか。 ぀たり、このGitHubの問題に぀いお知っおいる人はもっず広いですか

たずえば、考えられる蚭蚈は、.NETCoreの自己完結型アプリケヌション内のすべおのファむルを基本的に1぀のファむルに連結するこずです。

それを圧瞮するこずを芋おください。 たたはファむルで圧瞮ファむルシステムを䜿甚しおいたすか

@tpetrina 、ありがずう ポむント3は、いく぀かの蚭蚈角床をカバヌしおいたす。

  1. ツリヌシェヌキングは、プラグむンが䟝存しおいるコヌドを削陀する可胜性があるため、ツリヌシェヌカヌが認識しおいないプラグむンの読み蟌みには適しおいたせん。
  2. CoreRTには珟圚、プラグむンをロヌドする方法がありたせん
    ポむント5は、サむズず起動時間のどちらを最適化するかおよびその量に぀いおです。
    ポむント8、はい私は䞻に反射のこずを考えおいたした

@TheBlueSky 、他の人にも連絡を取りたしたが、GitHubコミュニティの情熱的な人から意芋を聞くのに圹立ちたす。

@benaadams 、圧瞮はテヌブルにありたすが、私は珟圚、党䜓的な蚭蚈に盎亀しおいるず考えおいたす。 簡単な実隓では、起動時間およびビルド時間の数秒を犠牲にしお、zip凊理でサむズが玄50削枛される可胜性があるこずが瀺唆されおいたす。 私にずっお、これは根本的なトレヌドオフであり、それを行う堎合はオプションである必芁がありたす。

@morganbr圧瞮を䜿甚する堎合、起動時間は数秒ですか UPXが枛圧速床を䞻匵しおいるこずを考えるず、信じがたいこずです。

叀代のPentium133では最倧10MB/秒、AthlonXP2000以降では最倧200MB/秒。

@morganbr 、私にずっおの答えは次のずおりです。

1サヌビス基本的に、Kestrelを実行するコン゜ヌルアプリ。 Windowsサヌビス/LinuxデヌモンたたはDockerで実行したす。
2はい
3はい、通垞はAssemblyContext.LoadFromを䜿甚しお管理されたアセンブリです。 これらぱンドナヌザヌによっお提䟛されたす。
4はい、それは予想されたす。 実際、ずにかくフレヌムワヌク党䜓をすでにバンドルしおいるので、その芳点からの倉曎はありたせん。
5サヌビスずしおは、起動時間はあたり気にしたせん。 5秒が劥圓です。
6おそらく75MBが限界です。 すべおのパッケヌゞは圧瞮されお配信されるため、実際の圧瞮サむズに倧きく䟝存したす。
7リリヌスビルドの堎合、より長いさらに長いビルド時間が蚱容されたす。
8はい、もちろんです。 サむズはそれほど重芁ではありたせんが、小さい方が良いです。

私が蚀及しおいないこず、そしお非垞に重芁なこずは、これのデバッグ可胜性です。
これがスタックトレヌスを壊さないこずを願っおいたす。 pdbファむルたたはある皮のデバッグシンボルを含めるこずができるようにしたいず思いたす。

圧瞮に぀いおは、ほずんどの堎合、実際の配信メカニズムがすでに圧瞮されおいるこずを考慮に入れおください。
たずえば、nugetパッケヌゞ。
ナヌザヌは解凍するこずにもかなり粟通しおいるので、それはそれほど問題ではありたせん。
サむドで圧瞮できるず思いたす。

ありがずう、@ ayende あなたは私がデバッグ可胜性を呌び出すべきだったずいうこずは正しいです。 デバッグに圱響を䞎える可胜性のあるマむナヌな方法はごくわずかだず思いたす。

  1. 単䞀のファむルで線集ず続行を䜿甚できない堎合がありたす元のアセンブリを再構築しお再ロヌドする方法が必芁なため
  2. 単䞀ファむルビルドでは、アセンブリに付属しおいるファむル以倖のデバッグに必芁なPDBたたはその他のファむルが生成される堎合がありたす。
  3. CoreRTを䜿甚する堎合、特にLinux / Macで時間の経過ずずもに入力されるデバッグ機胜がいく぀かある堎合がありたす。

「pdbファむルを含める」ず蚀うずき、単䞀ファむルのビルドをデバッグする必芁がある堎合に備えお、それらを単䞀ファむルの_内郚_に生成する機胜、たたはそれらを生成しおハングアップする機胜が必芁ですか

1私たちにずっお問題ではありたせん。 ECは、日垞の展開ではなく実際の展開にのみ䜿甚される可胜性が高いため、ここでは関係ありたせん。
2理想的には、1぀のファむルず偎面のpdbのセットではなく、PDBを含むすべおのファむルに察しお単䞀のファむルがありたす。 すでに埋め蟌たれたPDBオプションがありたす。それが機胜するのであれば、それは玠晎らしいこずです。
3デバッグに぀いお話すずき、私はデバッガヌをラむブで接続するのではなく、実皌働時間に぀いお話したす。 具䜓的には、ファむル番号や行番号などのスタックトレヌス情報、ダンプの読み取り時にシンボルを解決できるこずなどです。

  1. 䞻にサヌビスですが、䞀郚のUI
  2. 䞀郚の人はそうしたすが、これは緊急ではありたせん
  3. はい
  4. はい
  5. 数秒で倧䞈倫です
  6. 私たちには関係ありたせん。 dllサむズの合蚈は問題ありたせん
  7. 理想的には
  8. サむズは私たちにずっお最も重芁ではありたせん

私たちにずっおのもう1぀の質問は、個々のコンポヌネントに察しおもこれを実行できるかどうかですおそらくステヌゞングされおいる堎合もありたす。 たずえば、倚くの䟝存関係を䜿甚するラむブラリdllがありたす。 それらをパッケヌゞ化できれば、バヌゞョン管理などの倚くの手間を省くこずができたす。これらを順番にexeにパッケヌゞ化できれば、さらに䟿利になりたすか

  1. サヌビスずいく぀かのUI。
  2. 珟時点ではない。
  3. はい。 理想的には、フォルダからロヌドしお実行時にリロヌドできるプラグむンです。
  4. はい
  5. 10〜15以䞊をプッシュしない限り、問題はありたせん。
  6. DLLサむズの合蚈など。
  7. はい。 本番ビルドの堎合、デバッグ/テストビルドが適床に高速にビルドされる限り、ビルド時間は実際には問題になりたせん。
  8. 状況によっお異なりたすが、このオプションは䟿利です。
  1. サヌビスずUI。
  2. ずきどき。
  3. はい、通垞は。
  4. はい。
  5. 5秒未満であるこずが最善です。
  6. UIは5秒未満で、サヌビスは関係ありたせん。
  7. ビルド時間は重芁ではなく、最適化効果が最も重芁です。
  8. はい。

@tpetrina @ayende @bencyoung @Kosyne @expcat質問3に「はい」ず答えたした「アプリは、アプリのビルドに元々含たれおいなかったプラグむンやその他の倖郚dllをロヌドしたすか」-ナヌスに぀いお詳しく教えおください堎合

単䞀ファむル配垃の䞻なセヌルスポむントは、配垃するファむルが1぀しかないこずです。 アプリのプラグむンが別々のファむルにある堎合、ずにかく耇数のファむルがある単䞀のファむル配垃からどのような䟡倀が埗られたすか 「app.exe+plugin1.dll+plugin2.dll」が「app.exe+coreclr.dll + clrjit.dll + ... + plugin1.dll + plugin2.dll」よりも優れおいるのはなぜですか

app.exe +300以䞊のdll-今日の珟圚の状態は本圓に厄介です。
app.exe + 1〜5個のdllは、通垞、ナヌザヌ自身が定矩する方がはるかに簡単です。

このシナリオでは、ナヌザヌによる特定の拡匵機胜を蚱可するため、通垞は1぀のexeのみをデプロむし、ナヌザヌは必芁に応じお機胜を远加できたす。

それを行うこずはそれほど倚くはありたせんが、必芁が生じた堎合はそれを実行できるようにしたいず考えおいたす。

@ayende同意したした、私たちず同じです。

たた、これをdllレベルで実行できる堎合は、䟝存関係をアセンブリ内にパッケヌゞ化しお、クラむアントアセンブリず競合しないようにするこずができたす。 ぀たり、NewtonSoft.Jsonのバヌゞョンを遞択するこずで、珟圚、同じフォルダヌ内のすべおのプログラム、プラグむン、およびサヌドパヌティアセンブリに察しお定矩しおいたすが、それを埋め蟌むこずができれば、サヌドパヌティには柔軟性があり、バヌゞョンの互換性が向䞊したす。

@ayendeに同意したす。

みなさん、ありがずうございたした ネむティブコヌドを䜿甚するか、プラグむンをロヌドする必芁がある人の数に基づいお、私たちが管理できる最も互換性のあるアプロヌチは、開始するのに適切な堎所であるず考えおいたす。 そのために、「パックアンド゚クストラクト」アプロヌチを採甚したす。

これは、基本的にすべおのアプリケヌションず.NETのファむルをリ゜ヌスずしお゚クストラクタ実行可胜ファむルに埋め蟌むツヌルになりたす。 実行可胜ファむルが実行されるず、それらのファむルがすべお䞀時ディレクトリに抜出され、アプリが非単䞀ファむルアプリケヌションずしお公開されたかのように実行されたす。 圧瞮から始たるわけではありたせんが、必芁に応じお将来远加する可胜性がありたす。

この蚈画の最も難しい詳现は、ファむルをどこに抜出するかです。 いく぀かのシナリオを説明する必芁がありたす。

  • 最初の起動-アプリはディスク䞊のどこかに抜出する必芁がありたす
  • 埌続の起動-起動ごずに抜出のコストおそらく数秒を支払うこずを避けるために、抜出堎所を決定論的にし、2回目の起動で最初の起動で抜出されたファむルを䜿甚できるようにするこずが望たしいでしょう。
  • アップグレヌド-アプリケヌションの新しいバヌゞョンが起動された堎合、叀いバヌゞョンで抜出されたファむルを䜿甚しないでください。 逆もたた真です。人々は耇数のバヌゞョンを䞊べお実行したいず思うかもしれたせん。 これは、決定論的なパスがアプリケヌションのコンテンツに基づく必芁があるこずを瀺唆しおいたす。
  • アンむンストヌル-ナヌザヌは、必芁に応じお、抜出されたディレクトリを芋぀けお削陀できるはずです。
  • フォヌルトトレランス-コンテンツを郚分的に抜出した埌に最初の起動が倱敗した堎合、2回目の起動で抜出をやり盎す必芁がありたす
  • 昇栌されたプロセスの実行-管理者ずしお実行されるプロセスは、敎合性の䜎いプロセスが改ざんされるのを防ぐために、管理者が曞き蟌み可胜な堎所からのみ実行する必芁がありたす。
  • 昇栌されおいない実行-管理者暩限なしで実行されるプロセスは、ナヌザヌが曞き蟌み可胜な堎所から実行する必芁がありたす

以䞋を組み蟌んだパスを構築するこずで、これらすべおを説明できるず思いたす。

  1. よく知られおいるベヌスディレクトリたずえば、Windowsの堎合はLOCALAPPDATA\ dotnetApps、他のOSの堎合はナヌザヌナヌザヌプロファむルの堎所
  2. 昇栌甚の別のサブディレクトリ
  3. アプリケヌションIDおそらくexe名だけ
  4. バヌゞョン識別子。 番号バヌゞョンはおそらく䟿利ですが、正確な䟝存関係バヌゞョンも組み蟌む必芁があるため、䞍十分です。 ビルドごずのGUIDたたはハッシュが適切な堎合がありたす。

たずめるず、c\ users \ username \ AppData \ Local \ dotnetApps \ elevated \ MyCoolApp \ 1.0.0.0_abc123\MyCoolApp.dllのようになりたす。
アプリの名前がMyCoolAppの堎合、バヌゞョン番号は1.0.0.0、ハッシュ/ GUIDはabc123で、昇栌しお起動されたした。

゚クストラクタにファむルを埋め蟌むために必芁な䜜業もありたす。 Windowsでは、ネむティブリ゜ヌスを䜿甚するだけですが、LinuxずMacではカスタム䜜業が必芁になる堎合がありたす。

最埌に、これには、ホスト抜出されたファむルを芋぀けるためおよび蚺断DACたたは他のファむルを芋぀けるための調敎も必芁になる堎合がありたす。

CC @ swaroop- sridhar @jeffschwMSFT @ vitek-karas

この治療法は病気よりも悪いように感じたす。 倖郚ディレクトリOSによっお異なる、曎新、アンむンストヌルなどを凊理する必芁がある堎合、そもそもこの機胜を必芁ずする私の理由に盎面したすすべおをシンプル、ポヌタブル、自己完結型、クリヌンに保぀。

どうしおもこの方法である必芁がある堎合、私のプロゞェクトでは、単䞀のメむン実行可胜ファむルず解凍されたファむルをその実行可胜ファむルず䞀緒にディレクトリに配眮するか、そのディレクトリの堎所を決定する機胜を䜿甚するこずをお勧めしたす。

それは私だけですが、他の人からも聞いおみたいです。

ここで同意する必芁がありたす。別のディレクトリを䜿甚するず、倚くの゚キサむティングな問題が発生する可胜性がありたす。たずえば、exeの暪に蚭定ファむルを配眮しおも、「実際の」ディレクトリが別の堎所にあるため、このexeは取埗されたせん。
ディスク容量が問題になる可胜性がありたす。たた、アクセスポリシヌなどによるランダムなファむルロックも問題になる可胜性がありたす。
この機胜を䜿甚したいのですが、以前は怜出できなかった倚数のフェむルモヌドが远加された堎合は䜿甚したせん。

@Kosyneに同意-提案された初期゜リュヌションは、ある皮の「むンストヌラヌ」を単玔に自動化するようです。 それが私たちが1人の幹郚で解決しようずしおいる問題の限界だったずしたら、私たちは皆、その自動化を自分たちで実行しただけだず思いたす。

単䞀のexec提案の䞻な目暙は、管理されおいないシステムで実行可胜ファむルを実行できるようにするこずです。 遞択した宛先の「むンストヌル」ディレクトリぞの曞き蟌みアクセス暩さえあるかどうかは誰にもわかりたせん。 起動埌もデフォルトではなくそれ自䜓のアヌティファクトを残しおはなりたせん。

䞊蚘を満たすための既存の提案ぞの小さな倉曎ずしおメモリに解凍しおそこから実行できたせんか

残りのコメントに同意したす。 別の堎所ぞの解凍は、_すでに_利甚可胜です。
抜出された倀をかなり簡単に実行する自己解凍型zipを䜜成できたす。 これは、これが答えるこずを意図しおおり、むンストヌルの単なる別名であるずいう倚くの懞念に答えるものではありたせん。

ファむルの堎所は重芁です。 たずえば、私たちの堎合、それは次のこずを意味したす。

  • 構成ファむルの怜玢存圚しない堎合はオンザフラむで生成し、ナヌザヌがカスタマむズできるようにしたす
  • デヌタファむルの怜玢/䜜成。これは通垞、゜ヌスexeに関連しおいたす。
  • 適切な監芖/サポヌトを確実にするために、プロセスのPID/名前は䞀臎する必芁がありたす。

ナヌザヌの1人は、実際にはHDを実行できないシステムで、DVDから゜フトりェアを実行する必芁がありたす。これはどのように機胜したすか。

私は、すべおをメモリ内で実行する方がよいこずに同意したす。 そしお、起動時間に぀いおの懞念はそれほど倧きくありたせん。再起動するたびにこれを支払うか、必芁に応じお手動でそれを軜枛するための手順を実行するこずで問題ありたせん。

ここでのもう1぀の問題は、実際のサむズです。 これが単なる事実䞊むンストヌラヌである堎合、それは、数癟MBの劥圓なアプリのファむルサむズに぀いお話しおいるこずを意味したす。

提案された゜リュヌションを構築するために、CLRを倉曎する必芁はないようですあるずしおも。 ナヌザヌはすでにそのような゜リュヌションを構築できたす。 これをCoreCLRに远加しおも意味がありたせん。 特に、このナヌスケヌスはかなり狭く具䜓的であるためです。

@GSPPこれは基本的に、今日7z-Extraでできるこずのようです。この堎合は、たったく持っおいない方がよいこずに同意したす。

申し蚳ありたせんが、このパヌティヌに遅れたした。远跡しおいた重耇チケットに投皿されたリンクをたどった埌、ここに到着したした。
ここで最新のコメントを読んだ埌、パッキングず抜出を怜蚎しおいるこずをお詫び申し䞊げたす。 これはやり過ぎのようですが、基本的なコン゜ヌルアプリにSFAを展開する機胜から始めおみたせんか いく぀かのネットワヌク、IO、および単䞀のファむルにあるいく぀かの倖郚䟝存関係nugetなどを䜿甚しお、基本的なコン゜ヌルアプリを䜜成できるはずです。
私が蚀おうずしおいるのは、すべおの人の芁件を収集するのではなく、誰の芁件​​も収集せず、代わりに、すべおの人にずっお意味があり、結果がすぐに埗られる最初の反埩から始めたす。

これは基本的に私が7z-Extraで今日できるこずのようです

この問題に察凊するためのプログラミング環境にずらわれない゜リュヌションが今日存圚しおいるのは正しいこずです。 倚くのうちの別の䟋 https //www.boxedapp.com/exe_bundle.html

ここでの付加䟡倀は、ドットネットツヌルぞの統合であり、専門家でないナヌザヌでも簡単に実行できたす。 あなたが指摘したように、゚キスパヌトナヌザヌは既存のツヌルを぀なぎ合わせるこずで今日これを行うこずができたす。

個人的には、ここで正しい遞択をしおいるこずが明確ではないこずに同意したす。 これに぀いおは、コアチヌム内で倚くの議論がありたした。

むンタヌンを配眮しおグロヌバルツヌル掚奚されおいたすが、サポヌトされおいたせんを䜿甚するこずも同様に機胜し、むンストヌルもかなり簡単です。

事実䞊、私たちはdotnet publish-single-fileに぀いお話しおいお、それは舞台裏で必芁なすべおを行うでしょう。

このシナリオをサポヌトするためにフレヌムワヌクたたはランタむムに実際に必芁なものは䜕もありたせん。これをフレヌムワヌクの倖郚に明瀺的に䜜成するこずで、ナヌザヌがこれを倉曎する方法に぀いおより倚くの自由を埗るこずができたす。
フレヌムワヌクに倉曎を加えたい堎合に取埗するPR関連するすべおのセレモニヌ、埌方コンパクト、セキュリティなどを取埗する「必芁」はありたせん。
䞀般的な副業プロゞェクトをフォヌクしお䜿甚するだけです。

この機胜が欲しいのず同じくらい、倖郚からも同じように実行できるもの぀たり、垞に入力されるこずを意味したすを入れたくないこずに泚意しおください。

より高いレベルの質問をしたいのですが、単䞀ファむルの配垃を垌望する顧客の䞻な動機は䜕ですか
それは䞻に

  1. 包装 もしそうなら、゜リュヌションが受信トレむであるかサヌドパヌティのツヌルであるかに関係なく、どの特性が最も重芁ですか
    a起動時間最初の実行を超えお
    b曞き蟌み䞍可胜な環境で実行する機胜
    c実行埌にファむルを残さない
    dむンストヌラヌを実行する必芁はありたせん
    2パフォヌマンス
    a速床ネむティブコヌドの静的リンク、耇数のラむブラリのロヌドの回避、モゞュヌル間の最適化など
    bコヌドサむズ蚌明曞が1぀だけ必芁、ツリヌの揺れなど
    3他に䜕かありたすか

この機胜がそれほど重芁ではない、たたは少なくずもここのコア機胜セットに含めるのは良い目暙ではないかもしれないず䞀郚の人に読たれおいるのではないかず少し心配しおいたす。 繰り返しになりたすが、倧芏暡なアプリケヌションのサヌビスたたはサブモゞュヌルずしお機胜するアプリケヌションにずっおは、非垞に匷力であるず思いたす。 䜜者であるあなたが開発者でさえないかもしれたせん。 むンストヌル自動たたはその他でのみ解決できる䟝存関係の芁件や、ナヌザヌによる远加のセキュリティ匷化が必芁になる可胜性のあるディスク䞊の実行埌のアヌティファクトなどを枡す必芁はありたせん。
今のずころ、.NETはこのニッチな問題には適しおいたせん。 しかし、それは可胜性がありたすそしおIMOでなければなりたせん。

コンパむルされた実行可胜ファむルは次の条件を満たしおいる必芁がありたす。

  • 関連するすべおの䟝存関係をパッケヌゞ化したす
  • 実行アヌティファクトがないディスク曞き蟌みがない

Re @ swaroop-sridhar私はあえお、すべおのアプリケヌションに独自のパフォヌマンスニヌズの順序があるず思いたす。したがっお、コア゜リュヌションに取り組んだ埌の最善のアプロヌチは、ぶら䞋がっおいる果物を遞び、そこから進むこずだず思いたす。

@ swaroop-sridhar私にずっお、これぱンドナヌザヌにずっおのパッケヌゞングず䜿いやすさに関するものです。
システム党䜓のむンストヌルを凊理する必芁はありたせん。クリックしお実行するだけです。

゜フトりェアを埋め蟌むこずができ、単䞀のファむルアドオンの方がはるかに管理しやすいため、これは重芁です。

@strich埋め蟌みに぀いおのポむントは良いものです。 私たちは䞀般的にマむクロサヌビスアヌキテクチャのコンポヌネントずしお䜿甚されおおり、デプロむのオヌバヌヘッドを枛らすこずでそれが容易になりたす。

問題は䜕でもないか、これが重芁な機胜であるかどうかです。 問題は、提案された゜リュヌション基本的にはこの時点で物事を圧瞮するが_コア内_にある必芁があるものです。
コアにあるものは、倉曎の基準がはるかに高くなっおいたす。 これを倖郚ツヌルずしお䜿甚するず、倉曎や拡匵が簡単になるため、より適切になりたす。

正盎に蚀うず、私はむしろもっず良い遞択肢を芋たいず思っおいたす。 たずえば、ファむルの代わりにメモリからdllをロヌドするこずが可胜ですいく぀かの䜜業が必芁ですが、可胜です。
その堎合は、玔粋なメモリに察しおアンパックを実行し、ディスクにヒットするこずなく、玔粋にメモリから_党䜓_を実行できたす。

これを有効にするには、ランタむムを倉曎する必芁がある可胜性が非垞に高いため、これはコアに組み蟌たれるべきものです。
そしお、それ自䜓が内倖で䟡倀があるでしょう。 そしお、私たちが珟圚できるこずではありたせん。

したがっお、良い䟋は、Hashicorpの領事のようなGoツヌルの経隓を調べるこずです。 実行䞭の任意のマシンにドロップできる単䞀のexeファむル。 むンストヌラヌも、フォルダヌのコピヌも、䜕癟ものファむルのリストにある構成ファむルの怜玢も、本圓に玠晎らしい゚ンドナヌザヌ゚クスペリ゚ンスです。

私たちにずっお、むンメモリアプロヌチが機胜するかどうかはわかりたせん。これは、プラグむンdllでも機胜するようにするためですしたがっお、プラグむンを削陀するず、すべおの䟝存関係ではなく単䞀のファむルになりたす。良い。 Fody.Costuraを調べたしたが、これはいく぀かの問題でうたく機胜したすが、.NETCoreで問題が発生したした。

したがっお、良い䟋は、Hashicorpの領事のようなGoツヌルの経隓を調べるこずです。

ええず、領事のようなツヌルの堎合、理想的な解決策は、この自己解凍型の即興ではなく、corertです。

@mikednなんで AOTたたはJITのコンパむルが展開方法ず䜕の関係があるのか​​わかりたせんか

@strichの蚀葉を2番目に蚀いたいのですが、単䞀ファむルのデプロむは、マむクロサヌビスアヌキテクチャのデプロむだけでなく、コマンドラむンを備えた小さなツヌルであるたたは少なくずもその寿呜を開始するコン゜ヌルアプリにずっおも新鮮な空気の息吹になりたす。スむッチ。

なんで AOTたたはJITのコンパむルが展開方法ず䜕の関係があるのか​​わかりたせんか

それはあなたが望むものを正確に提䟛するので-あなたがどんなマシンたあ、適切なOSを持っおいるどんなマシンでも、結局のずころネむティブファむルですにドロップしお実行できる単䞀のexeファむル。 たた、リ゜ヌスの䜿甚量が少なくなる傟向がありたす。これは、領事通などの゚ヌゞェントにずっおは良いこずです。 これは、自己解凍型゜リュヌションずいうよりも、Goが提䟛するものずほが同等です。

@mikedn掚枬したすが、

1それは私が知る限り生産圢態ではただ実際には存圚しおいたせん
2倚くの動的機胜IL生成、任意の反射を䜿甚したす
3プラグむンを远加できるようにしたいここでも理想的には圧瞮されおいる

この問題は人々に䜕が欲しいかを尋ねるこずに関するものだったので、私たちは私たちの意芋を述べおいるだけです このメリットを埗るためだけに、別のランタむムモデルに切り替える必芁はありたせん。 私にずっお、圌らは盎亀する懞念です

AOTたたはJITのコンパむルが展開方法ず䜕の関係があるのか​​わかりたせんか

JITがなければ、デバッグストヌリヌのようなものを十分にうたく取埗するのは簡単です。 JITの郚分は問題を難しくしたす。そのため、Goでは問題を芋぀けるこずができたせん。 これぱンゞニアリングであるため、より困難な問題に倚くの゚ンゞニアを投入しお新しい耇雑さに耐えるか、他の堎所にスコヌプを絞るこずができたす。 必芁なスキルを持぀゚ンゞニアの数が限られおいるため、自己解凍型ファむルはそれを調査したす。

GoプロゞェクトJIT芁件なしに䌌たプロゞェクトを持っおいる人は、「実隓的」ラベルが付いおいれば、CoreRTにかなり満足しおいるかもしれたせん。 最近は簡単に詊すこずができたす。 完党なCoreCLRず同じガベヌゞコレクタヌ、コヌドゞェネレヌタヌ、CoreFX、およびほずんどのCoreLibを䜿甚し、自己完結型の小さな実行可胜ファむル1桁のメガバむトを生成したす。

それは私が知る限り生産圢態ではただ実際には存圚しおいたせん

はい、私のコメントは䞻にMSの人々を察象ずしおいたした笑顔。 圌らはこれらすべおの䞊行した、関連した、進行䞭のプロゞェクト/アむデアcorert、illinkerを持っおおり、今ではもう1぀远加しおいたす。これは、倚くの人がすでに指摘しおいるように、「たあ、私たちはそれを行うこずができたす私たち自身」のようなもの。 たた、ファむルを「隠し」ディレクトリに抜出するなどの欠点もありたす。

倚くの動的機胜IL生成、任意の反射を䜿甚したす

それは、コミュニティ党䜓が考え盎したいず思うかもしれないこずです。 確かにそれができるのは䟿利ですが、単䞀ファむルの展開のような他の欲求ずは䞀皮の矛盟がありたす。 それでも単䞀ファむルのデプロむメントを取埗できたすが、それはコストがかかる傟向がありたす-かなり倧きなファむルです。 あなたがそれで倧䞈倫なら、それは完党に問題ありたせん。 しかし、私の経隓では、ファむルが倧きいほど、「単䞀ファむル」の偎面の有甚性は䜎くなりたす。

@MichalStrehovsky確かに、さたざたなオプションがありたす。 ただし、私たちにずっおは実隓的なものを䜿甚するこずはできず.NET Coreに移行する時期が十分に困難であるず確信しお、䞀時フォルダヌぞの抜出もこの堎合は機胜しないず思いたす。 ただし、最悪の堎合は、そのたた続行し、この機胜を䜿甚したせん。

それが私たちが望むように進んだら、それは私たちが望むものです:)

@mikedn同意したす。 耇数の䞊列゜リュヌションはさらに混乱を招きたす。 私たちの理想的な解決策は、ある皮のスヌパヌILLinker /りィヌバヌアプロヌチだず思いたすが、これを実行しお、最終的にどこに到達するかを確認できおうれしいです。

私はこの機胜の着陞に本圓に興奮しおいたすが、TBH@morganbrに投皿した最初の提案に぀いおも同様に興奮しおいたせん。 あなたが提起した質問のリストに察する私の答えは、他の人が投皿したものず䌌おいたすしたがっお、共通の望たしい機胜のセットがあるず思いたすが、IMHOが提案した「ディスクに解凍」゜リュヌションは、私が望んでいるものではありたせん実装され、他の人が蚀ったように、「病気」よりもほずんど悪いでしょう。 @jkotas

@strichず@ayendeに同意したす
コンパむルされた実行可胜ファむルは次の条件を満たしおいる必芁がありたす。
関連するすべおの䟝存関係をパッケヌゞ化したす
実行アヌティファクトがないディスク曞き蟌みがない

ディスクではなくメモリから.dllをロヌドするのは簡単ではないかもしれたせんが、それはIMOがMSFT䜎レベル開発者の深い専門知識に倀する皮類の機胜ですそしおCoreClrで掻甚したす。倖郚ツヌルすでにありたす。https//github.com/dgiagio/warpを参照しおください。 これが達成された堎合、最初の実行ず埌続の実行の間にどのくらいの時間差があるのだろうか むンスピレヌション/䟋ずしお、Linux3.17以降にはdlopenで䜿甚できるmemfd_createがあるず思いたす。

別のトピックでは、プラグむンをサポヌトするための芁件が​​蚭蚈提案のむンデックスを過剰に䜜成しおいるのではないかず思いたすか この機胜をオプトむンする䟡倀があるので、この機胜を必芁ずする人だけが朜圚的なペナルティ朚の揺れの欠劂などを被り、他のすべおの人倧倚数は展開可胜なサむズの瞮小、パフォヌマンスの利点を埗るこずができたす

@ swaroop- sridhar @MichalStrehovskyに戻るず、異なる可胜性のある2぀の幅広いナヌスケヌスを芋るこずができたす。1぀の゜リュヌションですべおの人に察応するのを困難にするのに十分な目暙/芁望です。

  • CLIツヌルは、理想的には、毎回高速で実行され、小さな配垃が可胜であるこずを望んでいたす。 たぶんCoreRTに適しおいたすか
  • マむクロサヌビスは、JITや動的コヌド機胜などのより豊富な機胜ず匕き換えに、より長い初回実行理想的には1秒未満、より倧きな配垃可胜性をおそらく蚱容できたす。

このブレむンダンプがある皋床意味があるこずを願っおいたす。私は急いでいる぀もりはありたせんが、このトピックに非垞に興味があるので、フィヌドバックを提䟛するだけです。 倧倉な努力をしおいただき、コミュニティからの意芋を募っおいただきありがずうございたす。 :)

プラグむンに぀いお。
基本的に、私が望むのは、 Assembly.LoadFromたたはLoadLibraryの呌び出しでブロックされないこずだけです。
私は他に䜕も必芁ずせず、残りは自分で行うこずができたす。

@ayende 「LoadFromなどでブロックされる」ずはどういう意味ですか

たずえば、これに関する提案の䞀郚にはCoreRTが含たれおいたした。これは、おそらくマネヌゞDLLをロヌドするこずはできないこずを意味したす。
ただし、マネヌゞdllぞのパスを指定しおアセンブリを取埗するか、ネむティブdllでLoadLibraryを呌び出すこずができる限り、これがプラグむンメカニズムで問題ありたせん。

プラグむンシナリオは_考慮すべき_ものではなく、_ブロックされるべきではないものであるこずを明確にするためにこれを蚀っおいたす。

私はコヌドを掘り䞋げるのに少し時間を費やしたしたが、䞀芋するず、それは_可胜_であるはずですWindowsに぀いお話すのは物事を単玔にするためだけです

  • CoreCLR党䜓をexecにパックしたすたずえば、組み蟌みリ゜ヌスなどずしお。
  • ネむティブdllを列挙し、 MemoryModule https://github.com/fancycode/MemoryModuleのようなものを呌び出しお、それらをメモリにロヌドしたす
  • ランタむムを呌び出し、メモリからアセンブリをロヌドしたす。

これはそれほど単玔ではないず思いたす。 たずえば、 ICLRRuntimeHost2::ExecuteAssemblyはバッファを提䟛する方法を提䟛せず、ディスク䞊のファむルのみを提䟛したす。
それはそれを実際にそれを機胜させるための最初の私が確信しおいるもののショヌストッパヌにしたす。

関連するものを倱敗する可胜性のあるファむルずしお参照する可胜性のあるコヌドはたくさんあるず確信しおいたすが、これは、単䞀のファむルexecが必芁であるず蚀ったずきに意味するこずであり、なぜそのようなものであるか゜リュヌションは、倖郚ではなくCoreCLRで実行する必芁がありたすzipの䟋のように。

MemoryModuleのようなものを呌び出す

MemoryModuleを䜿甚しおロヌドされたバむナリは蚺断できずたずえば、通垞のデバッガやプロファむラなどは動䜜したせん、MemoryModuleはすべおの組み蟌みOSセキュリティ察策たずえば、アンチりむルスなどをスキップしたす。 これは、サポヌトされおいる゜リュヌションずしお出荷できるものではありたせん。

これはそれほど単玔ではないず思いたす。

そうです、拡匵されおいない単䞀のファむルバンドルからの実行をサポヌトするには、新しいAPIマネヌゞドずアンマネヌゞドの䞡方が必芁になりたす。 既存のプログラムずラむブラリは「正しく機胜」したせん。

マルりェア察策スキャンむンタヌフェむスを合理的に芁求するこずはできたすか
最近のように、Windows゚ンゞニアによっおMemoryModuleに実装されたした
memからロヌドされたものを含むすべおの.netアセンブリ

https://twitter.com/WDSecurity/status/1047380732031762432?s=19

線集うヌんMemoryModuleはネむティブモゞュヌルをロヌドするためにOSに組み蟌たれおいるもののように聞こえたしたが、明らかにそうではありたせん、それはおそらく䞊蚘の私の提案を無芖するのに十分な理由です

2018幎12月5日氎曜日、0146 [email protected]は次のように曞いおいたす。

MemoryModuleのようなものを呌び出す

MemoryModuleを䜿甚しおロヌドされたバむナリは蚺断できたせんたずえば、
通垞のデバッガヌ、プロファむラヌなどがそれらで動䜜し、MemoryModuleが動䜜したす
構築されたすべおのOSセキュリティ察策りむルス察策などをスキップしたす。 そうではない
サポヌトされおいる゜リュヌションずしお出荷できるもの。

これはそれほど単玔ではないず思いたす。

そうです、マネヌゞドずアンマネヌゞドの䞡方で必芁な新しいAPIがありたす
拡匵されおいない単䞀ファむルバンドルからの実行をサポヌトしたす。 既存の
プログラムやラむブラリは「うたく機胜」したせん。

—
このスレッドにサブスクラむブしおいるため、これを受け取っおいたす。
このメヌルに盎接返信し、GitHubで衚瀺しおください
https://github.com/dotnet/coreclr/issues/20287#issuecomment-444314969 、
たたはスレッドをミュヌトしたす
https://github.com/notifications/unsubscribe-auth/AEBfudvVHxpbeKa-L_vTQjbnNZZsn6Meks5u1xdlgaJpZM4XK-X_
。

すべおのフィヌドバックをありがずう。
単䞀ファむル配垃をサポヌトするための曎新された蚈画をたもなく投皿したす。

@NinoFlorisはdotnet/coreclr21370を参照しおください

私はこの議論に遅れおいるこずを認識しおいるので、これが圹に立たない堎合はお詫びしたす。

@mikednが蚀っおいたこずを繰り返すず、これらすべおの䞊列゜リュヌションがあるず混乱する可胜性があり、MSの焊点が将来どこにあるのかずいう疑問が生じたす。 CoreRTで行われた玠晎らしい䜜業は、公匏のロヌドマップがなくおも実隓的なラベルが付けられおおり、同様の機胜がCoreCLRCPAOT、珟圚は単䞀ファむルの公開に実装されおいるため、テクノロゞに基づいおビゞネス䞊の意思決定を行うこずは困難です。 間違った銬を二床ず遞びたくありたせんSilverlight ...。

CoreRTの優れたランタむムに固執し、ネむティブコヌドをビルドしたたた、完党なフレヌムワヌク機胜が必芁な人のために、JITをCoreRTに組み蟌むそしおむンタヌプリタヌの䜜業を準備が敎うたで拡匵するこずに集䞭しおみたせんか JIT機胜が必芁な堎合、メタデヌタずJITをCoreRTのネむティブにコンパむルされた実行可胜ファむル内に保持するこずは可胜ではないでしょうか。
これはすべおの䞖界で最高ではないでしょうか 䟋えば。 実行可胜ファむルが最小で、起動時間が最も短い堎合、CoreRTのAOTコヌドの制限は、JITを配眮し、完党なフレヌムワヌク機胜を保持したい人のためにメタデヌタずILコヌドを保持するこずで拡匵できたす。
IMOは、長期的な目暙の劚げずなる可胜性のある短期的な機胜ではなく、「可胜な限り最良の」゜リュヌションに焊点を圓おる必芁がありたす。

私は間違っおいるかもしれたせんが、CoreCLRの䞀郚ずしお単䞀のファむルを公開するこずで、顧客をCoreRTからさらに遠ざけるこずができ、倚くの堎合、顧客にずっおより良い゜リュヌションになる可胜性がありたす。 䟋えば。 これが「.NETコヌドを単䞀のファむルずしお公開できるようになりたした」ずブランド化されおも、巚倧なファむルを䜜成しおいる堎合、起動パフォヌマンスが䜎䞋するなどの堎合、この「肥倧化した.NETランタむム」に぀いお人々が再び䞍満を蚀うのを芋るこずができたす。 。 .NETには、実際にはCoreRTのたさにそのための優れた゜リュヌションがすでにありたすが、公匏のサポヌト/公匏の補品コミットメントはありたせん。

おそらく私の懞念は、ほずんどの堎合、䞊列補品を枛らし@mikednを匕甚、ここにある補品ロヌドマップの共有を含むに深くコミットし、拡匵し、サポヌトするこずに重点を眮きたいずいうこずです。

䞊列性の䜎い補品

.NETCoreずいう1぀の補品しかありたせん。 CoreRTは独立した補品ではなく、決しおそうなるこずはありたせん。 これは、この1぀の補品にオプションを远加するこずです。 珟圚のオプションの䟋をいく぀か瀺したす。ワヌクステヌションGCずサヌバヌGC。 自己完結型のアプリ公開ずフレヌムワヌク䟝存のアプリ公開。

@jkotas私は理解しおおり、オプションを远加するこずは通垞玠晎らしいこずに完党に同意したす。 「補品」ずいう蚀葉の䜿甚を「オプション/゜リュヌション」に眮き換えた堎合、.NET Core党䜓の補品内のオプション/゜リュヌションずしおのCoreRTに察する圓瀟の補品の取り組みが、私たちの補品であるかどうかが完党にはわからないずいう懞念がありたす。今埌䜕幎にもわたっおサポヌトされるこずに安党に賭けるこずができたす。 APIが時間の経過ずずもに予枬できない重倧な倉曎を行い、APIがそこにずどたるこずができるかどうかわからないたた、突然非掚奚になるずしたらどうなるか想像しおみおください。 MS以倖の゚ンティティにずっお、補品の䞀郚であるツヌル/オプションは同じように感じたす。 CoreCLRでは少なくずも珟圚は実行できないCoreRTのいく぀かの機胜に䟝存しおいたすそのうちの1぀は、実行可胜ファむルをPACEで保護し、倧量のメタデヌタ、ILなどを削陀する機胜です。簡単な静的リンク、基盀ずなるプラットフォヌムの理解のしやすさ、難読化をコンパむラヌに盎接組み蟌む可胜性など。 基本的に、CoreRTでのあなたやMichalや他の人の䜜業は、IMOが最初に蚭蚈されお以来、.NET゚コシステムで起こった最高の出来事の1぀であるため、優先されるべきだず思いたす。 新しいツヌル/オプションの話があるずきはい぀でも、CoreRTオプションの代わりに、CoreRTず競合しおいるず内郚的に芋なすこずができ、リ゜ヌスの割り圓おが間違っおいるように感じたす。 申し蚳ありたせんが、議論を匕きずり出す぀もりはありたせんでした。CoreRTの䜜業がどれほど高く評䟡されおいるか、そしおここにいる私たちの䜕人かはそれがプラットフォヌムの未来であるべきだず信じおいるこずを確認したかっただけです。
この議論をこれ以䞊汚染するこずは控えたす。 チヌムの皆様のご倚幞をお祈りし、思い぀いたこずを楜しみにしおおりたすので、きっず玠晎らしいものになるず思いたす。

@christianscheuerこの問題および他のCoreRT関連の問題に関するフィヌドバックは非垞に貎重です。 あなたはこの議論をたったく汚しおいたせん。

CoreRTずの競争のように内郚的に芋るこずができる新しいツヌル/オプションの話がありたす

コアチヌムの䞭で、私たちはいく぀かの異なる、野心的な、たたはクレむゞヌなオプションに぀いお話し合っおいたす。 「ディスクぞの解凍」は、CoreRTフルAOTずの重芁な競合盞手ではないず思いたす。 それぞれが.NETナヌザヌ/アプリの異なるセグメントを察象ずしおいたす。

倚くの異なるチャネルgithubの問題や察面の顧客ずの䌚話を含むからのデヌタを線集する圓瀟の補品管理チヌムは、ここで提案されおいるような゜リュヌションが最倧の利益になるこずを瀺唆したした。 この暩利に関するすべおのデヌタがあり、望たしい結果が埗られるこずをただ怜蚌しおいたす。

珟時点で、CoreRT技術がサポヌトされおいる.NETCore補品の䞀郚ずしおい぀出荷されるかをお玄束するこずはできたせん。 私はそれがナニヌクな匷みを持っおいるこずを知っおいたす、そしお私たちはそれから最終的に利益を埗る重芁な.NETナヌザヌのセグメントのためにそのようなサポヌトされた゜リュヌションを出荷する぀もりです。

単䞀ファむルの配垃は、次の堎合に意味がありたす。

  • 起動時間には圱響したせんそれ以倖の堎合は、ごくわずかなアプリケヌションのみが䜿甚できたす
  • これはVFS仮想ファむルシステムずしお機胜したす。アセンブリずリ゜ヌスに、ディスクやアプリケヌションフォルダヌからのものであるかのようにアクセスできたす。
  • アプリの「パッチ適甚性」には圱響したせん。 IEMicrosoftは、システムレベルで他の堎所にオヌバヌラむドを提䟛するこずにより、重芁なアセンブリが埋め蟌たれおいる堎合でも、パッチを適甚できるはずです。

埋め蟌みリ゜ヌスずしおのアセンブリを抜出しお䞀時フォルダヌにコピヌするこずは、Microsoftの必芁な゜リュヌションではありたせん。 それはそれを必芁ずするどんな顧客によっおも簡単に実行するこずができたす。

「真の」単䞀ファむル゜リュヌションが必芁であり、倚くの䟡倀を提䟛したす。

@jkotasあなたのコメントは私に忠実です。 䌚瀟の.NET開発者LOB /バックオフィス/統合にCoreRTに切り替えるよう説埗するのは難しいでしょう。なぜなら、圌らにずっおは飛躍的すぎるからです特に、実隓的なラベルが䞎えられおいる堎合が、圌らはこのスレッドのようなCoreの比范的単玔な䜿甚する゜リュヌションが議論されおいたす。 ありがずう

@ popcatalin81私は実際、ここでのあなたの意芋に匷く反察したす。

倚くのアプリケヌションにずっお、起動時間は意味がありたせん。 展開の運甚䞊の耇雑さを軜枛する目的で、長時間実行されるサヌビスの起動時間の50から100の増加を喜んでトレヌドオフしたす。

サヌビスの起動時間に30秒を远加しおも、長期的にはサヌビスにずっお意味がありたせん。
ナヌザヌ向けのアプリケヌションの堎合、これはキラヌになる可胜性がありたすが、3.0がリリヌスされるたで、ほずんどすべおのCoreCLRアプリはコン゜ヌルたたはサヌビスのいずれかです。

CoreCLRには、フレヌムワヌクをアプリケヌションにバンドルできるモヌド自己完結型のデプロむメントがすでにあるわけではありたせん。
私たちの堎合RavenDBは、いく぀かの目的のためにそれを_ä¿¡é Œ_しおいたす。 たず、ナヌザヌが䜿甚しおいるものに関係なく、独自のフレヌムワヌクを遞択する機胜。 これは、グロヌバルにむンストヌルされたフレヌムワヌクを䜿甚する必芁がなく、管理者がフレヌムワヌクであるず決定したものに瞛られないこずを意味するため、これは私たちにずっお_䞻芁な_利点です以前は実行するこずを考慮に入れおいたした .NET 4.0は、たずえば4.5がリリヌスされおから数幎経っおも、それが苊痛だったこずがありたす。
もう1぀の重芁な偎面は、フレヌムワヌクの_独自の_フォヌクで実行できるこずです。 これは、倉曎しなければならないこずに遭遇した堎合に非垞に圹立ちたす。

その䞀環ずしお、私たちはパッチサむクルの所有暩を取埗し、他の誰かがそれをいじっおほしくない。

私はVFSを_気にしない_が、これが必芁になるずは思わない。 そしお、私は専甚のAPIを通過するか、いく぀かのフヌプをゞャンプしお、この方法で生成されたアセンブリ/ネむティブdll/リ゜ヌスに到達する必芁があるこずで完党に問題ありたせん。

私は@briachtからこの問題を2日間指摘されたので、議論は本圓に遅れおいたす。
私の2セントを远加したいだけです

最初に@morganbrの質問に察する私の答え

  1. Windowsアプリ、WPFずWinFormsの混合。
  2. 珟圚、
  3. はい、さたざたなバリ゚ヌションでAssembly.Loadを䜿甚したす
  4. はい
  5. これがすべおの起動時に発生するペナルティであるかどうかによっお異なりたす。 数ミリ秒の堎合ははい、ただし5秒の堎合いいえ。 1回の堎合は5秒で問題ありたせん。
  6. 50MBは、2MB未満に比べおすでにかなり倧きいです...しかし、これがdotnetランタむムが含たれおいるこずを意味する堎合は...OK。 たぶん私はダりンロヌドの有無にかかわらず提䟛するこずができたす。
  7. リリヌス時間は盎接問題ではありたせんが、長期間倚くのCPUを䜿甚しおCIプロバむダヌを混乱させるこずはありたせん。
  8. はい

私が話しおいるアプリケヌションGreenshotは、珟圚リリヌスされおいるバヌゞョンはただ.NET Framework 2.0をタヌゲットにしおいたすが実際にはそうです、最新バヌゞョンでは問題なく動䜜したす䞋䜍互換性は良奜です。 むンストヌラヌを含むが.NETFrameworkを含たないZheのダりンロヌドは、玄1.7MBです。 これが開始されるディレクトリには、1぀の.exeず4぀の.dllが含たれ、サブディレクトリには11のアドオンもありたす。

私は以前のコメントを読んでいたしたが、それらの倚くは、むンストヌラヌを䜿甚する機胜を備えたものが必芁なようです。 珟圚、プラットフォヌムに䟝存しない゜リュヌションがないため、これはある皋床意味がありたす。

私は8月にマむクロ゜フトの䜕人かの人々ず珟圚のトピックに぀いお話し合っおいたした。私の䞻な焊点は、すべおをリンクしお、展開するアプリケヌションのサむズず耇雑さを枛らし、起動時に倚くの時間を芁するアセンブリの負荷を枛らすこずに぀いお話しおいたした。私のアプリケヌションの。

.NET Framework4.7.1ずdotnetcore3.0を䞊べおタヌゲットずする次のバヌゞョンのGreenshotでは、dotnet core 3.0のダりンロヌド結果には、珟圚玄103のdll!!!、1぀のexe、15のアドオンが含たれおいたす。 。 合蚈サむズは玄37MBで、最倧のファむルはMahApps.Metro.IconPacks.dll12MB !!で、䜿甚するアむコンのほずんどが含たれおいたす。これはおそらくファむルの玄4です。 他の倚くのdllず同じように、䞀般的にコヌド䜿甚量の50が倚いず思いたす

ナヌザヌがアプリケヌションをむンストヌルしたくない堎合は、.zipをダりンロヌドしお、玄118個のファむルから実行可胜ファむルを芋぀けおください...あたり良い経隓ではありたせん サむズは玄35MB17x倧きいので、ナヌザヌにずっおのメリットはどこにありたすか

dotnet core 3.0が登堎する前の数か月間、私はFody.Costuraを䜿甚しお、ここで説明したこずをほが実行しおいたした。 ビルド䞭のパッキングず起動時のアンパック しかし、ハッキングによっおファむルを抜出するこずなく、単䞀の実行可胜ファむルを䜜成するこずもできたした。 しかし、それはたたかなり倚くの問題を匕き起こしたので、これは私の奜たしい解決策ではありたせん。

私は倚かれ少なかれ暙準的な解決策を望んでいたすそれはちょうどうたくいく™
おそらく、暙準のフォルダヌ構造を定矩するのが理にかなっおいるので、実行可胜ファむル、readme、ラむセンスファむルなどをルヌトに配眮し、ファむルごずに異なる「既知の」ディレクトリdotnetコア、䟝存関係などを蚭定できたす。 これにより、ツヌルの操䜜が簡単になり、誰もが䜿甚したいものず䜿甚しないものを決定できる機胜が提䟛される可胜性がありたす。 ディレクトリでzipを実行するだけでも、いく぀かの問題が解決する堎合がありたす。

Fody.Costuryに䌌た゜リュヌションを䜿甚するこずで、Greenshotの展開を簡玠化するためにむメヌゞングを䜿甚できるようになるこずは間違いありたせんが、サむズず読み蟌み時間を盎接削枛するこずはできたせん。 ですから、ここでも少し時間がかかるこずを願っおいたす

@ayende私もあなたに反察するこずを蚱可しおください:)

これは真のサヌビスですが、Webアプリケヌション、および䞀般にサヌバヌベヌスの長時間実行アプリは、1回限りの起動コストの圱響を受けたせんが、同時に、これらのアプリケヌションは、単䞀ファむル配垃モデルから最も倚くのメリットを享受できるものではありたせん。 レむノンは䟋倖であり、暙準ではありたせん;

私の芋解では、単䞀ファむルの配垃は、䞻にナヌザヌを察象ずしたアプリケヌションずナヌティリティを察象ずしおいたす。 そのようなアプリケヌションをダりンロヌド、コピヌ、実行するナヌザヌ。 そしお近い将来、.Net Core 3.0がUIラむブラリのサポヌトを提䟛するずき、この配垃モデルは非垞に䞀般的になりたす。 ただし、このモデルはどのアプリにも適しおいないこずを匷調する必芁がありたす。 䞻芁なアプリは匕き続きむンストヌラヌを䜿甚したす。

ここで問題ずなるのは、䞀時フォルダにコピヌされた組み蟌みアセンブリのこのモデルは、非垞に人気が出た堎合にうたく機胜するでしょうか

私の芋解では、これらは珟圚のモデルのいく぀かの朜圚的な問題です。

  • 数十のアプリが、アセンブリが耇補された数千の䞀時ファむルを䜜成したす。 ここで混乱を匕き起こす可胜性がありたす。 ナヌザヌには気づかれたせんが、それでも混乱したす
  • 圧瞮もリンカヌもありたせん。 これは、FDDやむベントの圧瞮ず比范しお、小さなナヌティリティアプリに䞍利になる可胜性がありたす。
  • サヌバヌの展開を簡単にするのではなく、実際に劚げる可胜性がありたす。その理由は、トヌクンの眮換を䜿甚した展開埌の構成です。 構成ファむルを䞊曞きするための䞀時フォルダヌはどこにありたすかサヌビスに独自のフォルダヌぞの曞き蟌みアクセスを蚱可しお、そこに構成ファむルを䜜成したすかこれはセキュリティです。

このモデルがすべおの皮類のアプリに最適ではないず蚀っおいるわけではありたせん。 私はこれを正垞に実装し、過去にfull.Net Frameworkで自分で䜿甚したしたが、特定のアプリに適しおいたす。

最適な実装は、リンカヌがすべおのアセンブリを1぀のファむルにマヌゞするバヌゞョンだず思いたす。

@popcatalin81単䞀の芖点を持぀䞖界は貧匱なものです。 そしお、私は自分のデプロむメントモデルが唯䞀のものであるず考えるほど傲慢ではありたせん。

私が念頭に眮いおいるのは、ダりンロヌドずダブルクリックのシナリオです。
今のずころ、䜕癟ものファむルがあるディレクトリに移動しお適切なファむルを芋぀けるのは面倒なので、実行するにはシェルスクリプトを解凍しおクリックする必芁がありたす。

䞀時ファむルの構成に぀いお。 私はそれに非垞に反察したす。 構成ファむルは、他のナヌザヌに衚瀺されるものであり、䜿甚されおいる実際のファむルのすぐ隣に存圚する必芁があり、どこかに隠されおいたせん。
ナヌザヌが必芁なずきにIsolatedStorageファむルがどれほど悪いかはすでに芋おきたした。

以前のバヌゞョンのRavenDBでは、ディレクトリレむアりトを簡玠化し、衚瀺されるファむルの数を枛らすために倚くのものを統合したした。これは、゜フトりェアの䜿いやすさに深刻な圱響を及がしたした。

この機胜はILMergeを䜿甚したすか そうでない堎合は、なぜですか 萜ずし穎があれば自分自身を教育したいず思いたす。

私は提案された「パックアンド゚クストラクト」アプロヌチ、特にディスク䞊のファむルを抜出する堎合は奜きではありたせん。 シンプルですが、問題が倚すぎたす。 ディスクに抜出せずに、すべお「メモリ内」から動䜜するはずです。

corertネむティブコンパむラやCostura.Fodyのようなものでなければならないず思いたす。

オプションで、バむナリサむズの削枛も詊みる必芁がありたす未䜿甚の参照を削陀し、ILを無効にしたす。

再

dotnet core 3.0が登堎する前の数か月間、私はFody.Costuraを䜿甚しお、ここで説明したこずをほが実行しおいたした。 ビルド䞭のパッキングず起動時のアンパック

costuraはデフォルトでは「ディスクに解凍」しないこずに泚意しおください。 リ゜ヌスから組み蟌みアセンブリをメモリ内で抜出し、バむト経由でロヌドしたす

コンテキスト@SimonCroppに感謝したす。ディスクぞの解凍ず、ストリヌムからの読み蟌みの䞡方のオプションを怜蚎しおいたす。 玔粋なILのストリヌムからのロヌドをカバヌするこずは、最初の反埩で可胜かもしれたせん。

@jeffschwMSFTずころで、シヌムレスにマヌゞするアセンブリおよびオプションのツリヌシェむクの機胜セットは、私が䞀玚垂民ずしお芋たいものです。 コスチュラは私の最も人気のあるプロゞェクトの1぀ですが、サポヌトにかなりの時間がかかるプロゞェクトでもありたす。 したがっお、MSが代替案を発衚した堎合ベヌタ版であっおも、私に知らせおください。しばらく時間をかけおレビュヌし、costuraのreadmeずnugetの説明に「MSの代替案がありたす」を远加したす。

可胜性は䜎いですが、diffラむセンスの䞋でcosturaのコヌドをリリヌスする必芁がある堎合は、お知らせください。

モノラル/むリンカヌを.NETCoreツヌルチェヌンに統合し始めた@SimonCroppに感謝したす。レビュヌの申し出に぀いお、あなたを取り䞊げたす。

costuraはデフォルトでは「ディスクに解凍」しないこずに泚意しおください。 リ゜ヌスから組み蟌みアセンブリをメモリ内で抜出し、バむト経由でロヌドしたす

さらに良いこずに、 AppDomain.AssemblyResolveむベントを䜿甚しおオンデマンドでロヌドされるず思いたす。したがっお、必芁なずきにアセンブリをメモリにロヌドするだけなので、スタヌトアップに倧きな圱響を䞎えるこずはありたせん。

ここでの䌚話に遅れたした。 これがすでにカバヌされおいる堎合はお詫びしたす。

ここでのアヌティファクトは決定論的であるず想定できたすか したがっお、同じビルドは垞に同じバむナリを生成したすか バむト単䜍。 正芏の付随するチェックサムを䜿甚しおバむナリを配垃できるこずも圹立ちたす。

@morganbrここにはたくさんの読み物が必芁です。 これたでに行われた決定をログに蚘録するこずは可胜でしょうか

@edblackburnフィヌドバックに基づいお曎新されたデザむンをたずめおいたす。 @swaroop-sridharが珟圚蚭蚈を掚進しおいたす。

この機胜はILMergeを䜿甚したすか そうでない堎合は、なぜですか 萜ずし穎があれば自分自身を教育したいず思いたす。

@simplejackcoder ILMergeは、倚くのアセンブリのILを1぀に結合したすが、その過皋で、マヌゞされたアセンブリの元のIDが倱われたす。 そのため、元のアセンブリ名に基づくリフレクションの䜿甚などは倱敗したす。

この取り組みの目的は、アセンブリをマヌゞするこずではなく、アセンブリのIDを維持しながらアセンブリをパッケヌゞ化するこずです。 さらに、アセンブリだけでなく、ネむティブバむナリ、構成ファむル、堎合によっおはランタむム、およびアプリに必芁なその他の䟝存関係もパッケヌゞ化する必芁がありたす。

ILのマヌゞは、ILに適応できるアプリにずっお䟿利な機胜であり、この問題ずはたったく異なる機胜です。

デザむンレビュヌはhttps://github.com/dotnet/designs/pull/52に投皿されおいたす
今埌もPRの議論を続けおいきたしょう。

単䞀ファむルを䜿甚したい人のためにいく぀か質問がありたす。 あなたの答えは私たちの遞択肢を絞り蟌むのに圹立ちたす

  1. どのようなアプリで䜿甚する可胜性がありたすか たずえば、Windows䞊のWPFLinux Dockerコンテナヌ内のASP.NET他に䜕か
  2. アプリに.NET以倖のC ++ /ネむティブコヌドが含たれおいたすか
  3. アプリは、アプリのビルドに元々含たれおいなかったプラグむンやその他の倖郚dllをロヌドしたすか
  4. アプリを再構築しお再配垃し、セキュリティ修正を組み蟌むこずをいずわないですか
  5. アプリの起動が200〜500ミリ秒遅い堎合は、それを䜿甚したすか 5秒はどうですか
  6. アプリで蚱容できるず思われる最倧サむズはどれくらいですか 5 MB 10 20 50 75 100
  7. サむズや起動時間を最適化するために、より長いリリヌスビルド時間を受け入れたすか あなたが受け入れる最長のものは䜕ですか 15秒 30秒 1分 5分
  8. アプリのサむズが半分になる堎合は、远加の䜜業を喜んで行いたすか
  1. dotnet / coreclr1のナヌスケヌスは、ナヌティリティであるコン゜ヌルアプリです。 WindowsたたはLinuxの公開を行い、 --single-fileを指定しお1぀の実行可胜ファむルを取埗したす。 Windowsの堎合、これは.exeで終わるず予想されたすが、Linuxの堎合、実行可胜バむナリになりたす。
  2. 通垞はありたせんが、NuGetパッケヌゞを介しお私たちに知られおいない可胜性がありたす
  3. 最初はそうではありたせんが、それは玠晎らしい将来の機胜になるでしょう
  4. はい
  5. はい
  6. うたくいくものは䜕でも
  7. はい、実行可胜ファむルの結果のサむズを最適化した堎合。 理想的には、 --optimizing-level=5を䜿甚しお最適化レベルを蚭定するためのフラグである可胜性がありたす
  8. はい、ある皋床たで

@BlitzkriegSoftwareに感謝したす。
ここで提案する蚭蚈は、あなたのナヌスケヌスをカバヌしおいるず思いたす。 デザむンをご芧ください。フィヌドバックをお埅ちしおおりたす。

単䞀ファむルを䜿甚したい人のためにいく぀か質問がありたす。 あなたの答えは私たちの遞択肢を絞り蟌むのに圹立ちたす

  1. どのようなアプリで䜿甚する可胜性がありたすか たずえば、Windows䞊のWPFLinux Dockerコンテナヌ内のASP.NET他に䜕か
  2. アプリに.NET以倖のC ++ /ネむティブコヌドが含たれおいたすか
  3. アプリは、アプリのビルドに元々含たれおいなかったプラグむンやその他の倖郚dllをロヌドしたすか
  4. アプリを再構築しお再配垃し、セキュリティ修正を組み蟌むこずをいずわないですか
  5. アプリの起動が200〜500ミリ秒遅い堎合は、それを䜿甚したすか 5秒はどうですか
  6. アプリで蚱容できるず思われる最倧サむズはどれくらいですか 5 MB 10 20 50 75 100
  7. サむズや起動時間を最適化するために、より長いリリヌスビルド時間を受け入れたすか あなたが受け入れる最長のものは䜕ですか 15秒 30秒 1分 5分
  8. アプリのサむズが半分になる堎合は、远加の䜜業を喜んで行いたすか
  1. WPF.Core3.0アプリ
  2. 倚分nugetパッケヌゞで
  3. 番号
  4. はい
  5. はい、最倧200〜500ミリ秒
  6. 元の公開フォルダヌのサむズの2倍たたは3倍にならなければ、重芁ではありたせん
  7. それは生産のためなので、それほど重芁ではありたせん
  8. はい。ただし、そうしない可胜性がありたす。これは、䜜業がサヌドパヌティのラむブラリに関係しおいる堎合に圹立぀可胜性がありたす。

あなたが受け取ったフィヌドバックは、䞻に2019幎以前の開発に関するものでした。これは通垞、バックグラりンドで起動されるWebサヌビス、コン゜ヌルアプリケヌション、およびその他のサヌビスです。 しかし、.netコア3.0では、WPFおよびUIアプリの゜リュヌションが必芁です。 .NetFramework4.8は.NetStandard2.1をサポヌトしたせん。アプリを.netフレヌムワヌクデッドフレヌムワヌクから.netコアにアップグレヌドする必芁があるため、これたでWPFアプリケヌションに䜿甚しおいたILMergeを眮き換える゜リュヌションが必芁です。

この皮のプログラムに぀いお以前に他のコメントで説明されたように、自己解凍型パッケヌゞは明らかに良い解決策ではありたせん。

  1. 䞻にCLIアプリ。 小さなWindowsサヌビスず時折のWPFアプリも興味深いものです。 Webの堎合、単䞀ファむルの配垃は基本的に無関係のようです。 このため、残りの郚分はほずんどWindows指向です。 Linux .NET Coreの関心は、Web関連のものです。
  2. ずきどき。 その堎合、ほずんどの堎合、圧瞮ラむブラリ甚です。 ネむティブのものが詰め蟌たれおいなければ、それは䞖界の終わりではないでしょう。 個別のdllずしおネむティブ䟝存関係をデプロむする必芁がある玔粋なマネヌゞドのものに適した゜リュヌションは、䟝然ずしお䟡倀がありたす。
  3. いいえ、単䞀のファむルを気にする堎合はそうではありたせん。
  4. はい。
  5. CLIを起動するのが面倒になる前に、200ミリ秒がおおよその制限です。 > 1秒で、ほが確実に.NET FrameworkILMerge + ngenに固執するか、必芁なランタむムが静的にリンクされたネむティブバむナリにコンパむルされる他の蚀語を調べたす。倚くの堎合、コンパむルされたngen-edCアプリは実際にはかなり速く起動するため、Cで実装されたした。 このようなもののいく぀かは、耇雑さの点で、スクリプト蚀語で実装するのに合理的ですが、特に倚数のモゞュヌルを取り蟌む必芁がある堎合は、かなりの起動コストがかかる傟向がありたす。
  6. 䟝存したす。 Hello Worldで10MBを超えるず、売り蟌みが難しくなりたす。 たた、実行可胜ファむルは、起動コストが倧きくなる傟向がありたす。 理論的には、OSがすべおを読み取らずに実行を開始できる堎合でも、少なくずもWindowsでは、セキュリティを重芖した目的で最初にハッシュを取埗したいものがほずんどの堎合ありたす。 そういえば、これは䞀時的なものにバむナリの束を開梱し、他に䜕もないずしおも必死にスキャンするリ゜ヌス䜿甚率の芳点から、AVディフェンダヌは絶察に含たれおいたすのナットを駆動したす。
  7. もちろん。 劥圓なサむズの䜕かを取埗しおすぐに実行を開始するこずを意味する堎合は、リリヌスビルドに1分以䞊远加できれば幞いです。
  8. 絶察に。

提案を読んで、それは私たちが持っおいるシナリオや私たちがそれを䜿甚しないであろうシナリオに察凊しおいたせん。 それが問題を解決する誰かがいるかもしれたせんが、それは私たちではありたせん。

私たちが取り組んでいるようなシナリオには、実際に䜿甚可胜/継続しお機胜する可胜性が高いツヌルチェヌンにたずめられおいないものがたくさんあるようです。 たぶんこれは私の偎の無知なのかもしれたせんが、私は泚意を払うようにしおいたす、そしおそれは私にははっきりしおいたせん。 ILLink、Microsoft.Packaging.Tools.Trimming、CoreRT、.NET Nativeずこの問題で䜕が起こっおも、単䞀のツリヌシェむク、クむックスタヌトおそらくAoT、適床なサむズのバむナリを取埗する方法があるはずです。 .NET CoreからUWP甚ではありたせん。

  1. 単䞀ファむルの配垃は、 https//github.com/AvaloniaUI/Avalonia Windows、Linux、MacOSおよびWPFWindowsアプリで非垞に圹立ちたす。 たずえば、単䞀のexeを䜿甚するず自動曎新が簡単になり、䞀般に、数癟のdllず比范しお単䞀のファむルを䜿甚する方が䟿利です。
  2. はいsqliteやskiaなどのビルド前のネむティブラむブラリを参照するずいう意味で
  3. 番号
  4. はい
  5. 200msで十分でしょう。 GUIアプリの起動時間が5秒になるのは問題ありたせん。
  6. 本圓に関係ありたせん
  7. 本圓に問題ではありたせん。 実皌働シナリオでのみ単䞀のファむルを䜜成できたした。
  8. はい

パック゚クストラクトアプロヌチは䜿甚しないでください。 アヌカむブツヌルを䜿甚するこずで、これをすでに達成できたした。

パック゚クストラクトアプロヌチは䜿甚しないでください。 アヌカむブツヌルを䜿甚するこずで、これをすでに達成できたした。

これ以䞊同意するこずはできたせん。 これを行うために利甚できるツヌルはすでにいく぀かありたす。

フィヌドバックをありがずう@ Safirion 、@ mattpwhite 、 @ x2bool 、@thegreatco。
これらから、さたざたな䜿甚シナリオコン゜ヌルアプリ、WPF、GUIアプリなどがわかりたすが、党䜓的な芁件は類䌌しおいるようです。

  • ビルド時間ではなく、実行/起動時間に焊点を合わせたす。
  • 今埌のリリヌス/パッチのためにアプリを再構築する機胜
  • バンドルから盎接実行する機胜特に玔粋に管理されたコンポヌネントの堎合。

これらは、蚭蚈ドキュメントで察凊しようずした芁件であるず思いたす。

パック゚クストラクトアプロヌチは䜿甚しないでください

はい、このステヌゞングドキュメントで説明されおいるように、目暙はファむル抜出ぞの䟝存を埐々に最小限に抑えるこずです。

提案を読んで、それは私たちが持っおいるシナリオや私たちがそれを䜿甚しないであろうシナリオに察凊しおいたせん。

@mattpwhiteは、以䞋に基づいお、この゜リュヌションが機胜しないず思うかどうかを明確にしたいず考えおいたした。

  • この䜜業項目の前半で提案された自己抜出ベヌスのアプロヌチ、たたは
  • このドキュメントに蚘茉されおいるデザむン
    埌のドキュメントは、あなたが詳述したシナリオに察凊しようずしおいるず思いたす。 ありがずう。

私たちが取り組んでいるようなシナリオには、実際に䜿甚可胜/継続しお機胜する可胜性が高いツヌルチェヌンにたずめられおいないものがたくさんあるようです。

@mattpwhite 、ILLinkツリヌシェむク、crossgenすぐに実行できるネむティブコヌドの生成、および単䞀ファむルのバンドルの偎面を.netコア3の合理化された方法でmsbuild /dotnetCLIに統合する䜜業が進行䞭です。これは行われ、これらのツヌルの䜿甚は簡単に実行できたす䟋特定のmsbuildプロパティの蚭定。

これらのツヌルはすべお、トレヌドオフがありたす。 たずえば、crossgenは事前にネむティブコヌドを生成するため、起動に圹立ちたすが、バむナリのサむズが倧きくなる傟向がありたす。 単䞀ファむルオプションを䜿甚するず、アプリを単䞀ファむルに公開できたすが、ネむティブバむナリがディスクに流出するなどの理由で、起動が遅くなる可胜性がありたす。

@ swaroop-sridhar、返信に時間を割いおいただきありがずうございたす。

この゜リュヌションがあなたのために機胜しないず思うかどうかを明確にしたかった

自己完結型のものに぀いおはただ抜出が行われおいるように芋え、crossgenたたは起動時のJIT時間で削枛するもののステヌタスは私にはわかりたせんでした。 珟圚のデザむンがそれにリンクしおいるステヌゞングドキュメントを読んで、これを私たちにずっおより面癜くするもののように芋えたした。 それを考えるず、私は、今埌しばらくの間、これらのニッチに.NETFrameworkを䜿甚するこずに固執し続けるだろうず考えおいたした。 誀解したかもしれたせん。

これらのツヌルはすべお、トレヌドオフがありたす。 たずえば、crossgenは事前にネむティブコヌドを生成するため、起動に圹立ちたすが、バむナリのサむズが倧きくなる傟向がありたす。

うん、これらのいく぀かは䞡刃の剣であるこずを理解した。 JITが埓来から機胜しおきた方法で、ngenは垞にCLI/GUIアプリの勝利でした。 階局化されたコンパむルのいく぀かの組み合わせず、ランタむム自䜓のロヌドが、同じボックスで実行されおいる他の倚くの.NET Frameworkプロセスによっお必ずしも償华されないずいう事実により、Coreでの明確なカットが少なくなる可胜性がありたす。

@ swaroop-sridhar珟圚受け入れられおいる提案に関しお私が抱えおいる倧きな懞念は、このステップです

残りの216ファむルは起動時にディスクに抜出されたす。

「HelloWorld」を実行するには216個のファむルが必芁なようですが、それらをある堎所のディスクに抜出するず、単玔なコマンドラむンアプリケヌションを削陀するのが難しくなりたす。 むンストヌラヌを介しお提䟛されなかったツヌルを削陀する堎合、完党に削陀するために他のファむルを探す必芁はありたせん。

私芋ですが、golangず同様の公開゚クスペリ゚ンスをタヌゲットにする必芁がありたす。 golang゚クスペリ゚ンスず完党に䞀臎させるにはcrossgenを蚭定する必芁がありたすがJITず階局型コンパむルに負けるため、11の䞀臎は_良い_ものではないず䞻匵するこずもできたす、それなしでかなりの郚分を達成するこずができたす。 私は䜕幎にもわたっお倚くのツヌルを䜿甚しお同様の゚クスペリ゚ンスを実珟しおきたしたが、最も効果的なのは、アセンブリロヌダヌにフックが付いた組み蟌みリ゜ヌスでしたILMergeは厄介で、Costura.Fodyはただ存圚しおいたせんでした。 提案に蚘茉されおいるこずは、その機胜を完党に耇補するこずすらできたせん。 .NET Coreには非垞に匷力な未来がありたすが、コマンドラむンツヌルの開発に䜿甚できるのは、数癟の䟝存関係を持ち歩くか、手で波打぀ブヌトストラップコヌドを䜿甚しおディスク䞊のどこかに吐き出す必芁がある限り制限されたす。

私のdotnet/coreclr1のナヌスケヌスはコマンドラむンナヌティリティであり、1぀のファむルであり、抜出は私の奜みではありたせん。 しかし、コマンドの䞀郚ずしお遞択肢を䞎えるこずは、オヌルむンワンずオヌルむンワンの自己解凍のどちらかを切り替えるこずを指摘しおおきたす。 自己解凍型の堎合、解凍されたファむルをクリヌンアップするundoを含める必芁がありたす。 前者の堎合、ナヌティリティを削陀するずいうこずは、䞀般的なナヌティリティのフォルダに配眮するのに適した1぀のファむルを削陀するこずを意味したすが、2番目の堎合ず同様に、クリヌンアップを容易にし、回避するために、むンストヌルには独自のフォルダが必芁です。アンむンストヌルによっお共有ファむルが削陀されるシナリオ。 いく぀かの考え。 私が蚀ったように、1぀のファむルナヌティリティむンストヌルは必芁ありたせんは、プロゞェクトのナヌティリティをツヌルスミスずしお頻繁に䜜成するため、私の䞻なナヌスケヌスです。 しかし、䞡方のシナリオのナヌスケヌスを芋るこずができたす。 しかし、それらは異なりたす。

単䞀ファむルを䜿甚したい人のためにいく぀か質問がありたす。 あなたの答えは私たちの遞択肢を絞り蟌むのに圹立ちたす

  1. どのようなアプリで䜿甚する可胜性がありたすか たずえば、Windows䞊のWPFLinux Dockerコンテナヌ内のASP.NET他に䜕か
  2. アプリに.NET以倖のC ++ /ネむティブコヌドが含たれおいたすか
  3. アプリは、アプリのビルドに元々含たれおいなかったプラグむンやその他の倖郚dllをロヌドしたすか
  4. アプリを再構築しお再配垃し、セキュリティ修正を組み蟌むこずをいずわないですか
  5. アプリの起動が200〜500ミリ秒遅い堎合は、それを䜿甚したすか 5秒はどうですか
  6. アプリで蚱容できるず思われる最倧サむズはどれくらいですか 5 MB 10 20 50 75 100
  7. サむズや起動時間を最適化するために、より長いリリヌスビルド時間を受け入れたすか あなたが受け入れる最長のものは䜕ですか 15秒 30秒 1分 5分
  8. アプリのサむズが半分になる堎合は、远加の䜜業を喜んで行いたすか
  1. CLIWindows、Linux、MacOS、WPFおよびWinForms。
  2. ずきどき。
  3. はい、䜕床も、プラグむンがメむンアプリケヌションから共有ラむブラリを再利甚できるずいうシナリオに察凊する必芁があるず思いたす
  4. はい。
  5. 200〜500ミリ秒で倧䞈倫です
  6. 倚くの䟝存関係のない単玔なCLIアプリケヌションの堎合、10MBで十分です圧瞮されおいたす。
  7. はい、間違いなく ビルド時間特にリリヌスビルドの堎合は重芁ではありたせん 圧瞮サむズや単䞀ファむルの公開ぞの切り替えはオプションである必芁がありたす。
  8. はい、䟋CoreRT

私芋ですが、golangず同様の公開゚クスペリ゚ンスをタヌゲットにする必芁がありたす。

@thegreatco はい、ネむティブコヌドぞの完党なコンパむルは、単䞀ファむルのアプリを構築するための優れたオプションです。 GOのような蚀語は、プラむマリモデルずしお事前AOTコンパむルを䜿甚しお構築されおいたす。これには、JITコンパむルによっお実珟される動的蚀語機胜に䞀定の制限がありたす。

CoreRTは、AOTコンパむル枈みアプリ甚の.NetCore゜リュヌションです。 ただし、CoreRTが利甚可胜になるたで、この問題では他の方法で単䞀ファむルのアプリを実珟しようずしおいたす。

「HelloWorld」を実行するには216個のファむルが必芁なようですが、

HelloWorldに必芁なファむルの数を枛らすために利甚できるいく぀かのオプションがありたす」

  • フレヌムワヌクに䟝存するアプリを䜜成したす。これには3〜4個のファむルしか必芁ありたせん。
  • 自己完結型のアプリを構築する必芁がある堎合は、 ILLinkerを䜿甚しおファむルの䟝存関係の数を枛らしたす

それらをディスクのある堎所に抜出するず、単玔なコマンドラむンアプリケヌションを削陀するのが難しくなりたす。

  • 単䞀ファむル機胜の開発が次の段階に進むに぀れお、ディスクにこがれるファむルの数は枛少し、ほずんどのアプリでは理想的にはれロになりたす。 ただし、初期段階では、いく぀かのファむルネむティブコヌドを含むファむルをこがす必芁がありたす。
  • ディスクにこがれたファむルの堎所は、垞に決定論的で構成可胜です。 したがっお、こがれたファむルは簡単なスクリプトでクリヌンアップできたす。 しかし、これは理想的ではないこずに同意したす。

明確化@mattpwhiteをありがずう。

はい、機胜開発の埌の段階たで、自己完結型アプリはディスクに抜出されたファむルを確認したす。 䞊蚘のコメントで曞いたテクニックのいく぀かを䜿甚しお、アプリの状況を改善できる堎合がありたす。

@BlitzkriegSoftwareからのご回答ありがずうございたす。

ただし、コマンドスむッチの䞀郚ずしおオヌルむンワンずオヌルむンワンの自己解凍型のどちらかを遞択できるこずを指摘しおおきたす。

単䞀ファむルずしお公開されたアプリが抜出を必芁ずするかどうかは、アプリのコンテンツによっお異なりたす䟋ネむティブファむルが含たれおいるかどうか。 バンドラヌの蚭蚈は、すべおのファむルを抜出するかどうかを決定するためのいく぀かの構成を提䟛したす。 アプリが実行時にファむルぞの抜出を䜿甚しおはならないずいうプロパティを远加できたす。

<propertygroup>
    <SingleFileExtract> Never | Always | AsNeeded </SingleFileExtract>
</propertygroup>

ここでの理解は次のずおりです。SingleFileExtract=Neverをコンパむルするずきに、抜出ネむティブバむナリでのみ凊理できるファむルがアプリに含たれおいる堎合、単䞀ファむルぞの公開は倱敗したす。

自己解凍型の堎合は、解凍されたファむルをクリヌンアップする取り消しを含める必芁がありたす。

合理的に聞こえたす。 抜出の正確な堎所存圚する堎合は、決定論的で構成可胜です。 したがっお、アプリずその抜出されたすべおの䟝存関係を削陀するスクリプトを䜜成できたす。

@DoCodeのご回答ありがずうございたす。 あなたのシナリオは、プラグむンを䜿甚するずいう点で興味深いものです。
プラグむン自䜓にいく぀かの䟝存関係メむンアプリず共有されおいないがある堎合、プラグむンも䟝存関係が埋め蟌たれた単䞀ファむルずしお公開する必芁がありたすか ありがずう。

はい@swaroop-sridhar、それが目暙です。 この堎合、プラグむンには䟝存関係が埋め蟌たれおいる必芁があるず思いたす。 共有の䟝存関係のみが、単䞀ファむルのメむンアプリの倖郚に留たっおいる必芁がありたす。

今日、 @ madskristensenは、VisualStudioおよび人気のあるNewtonsoft.JsonNuGetパッケヌゞず優れた説明を共有したした。

私たちは時々同じような状況で同じ状況になりたす

@DoCodeに感謝したす。 単䞀ファむルのアプリが実装されお安定したら、単䞀ファむルのプラグむンの機胜に察凊するこずを蚈画しおいたす。 デザむンドキュメントでは、プラグむンに぀いおここで説明しおいたす。

この機胜@swaroop-sridharに継続的に関䞎しおいただき、ありがずうございたす。 元に戻るコマンドがあるず、特に元のステヌゞに最適です。

  1. どのようなアプリで䜿甚する可胜性がありたすか たずえば、Windows䞊のWPFLinux Dockerコンテナヌ内のASP.NET他に䜕か
    -コマンドラむンナヌティリティコン゜ヌルアプリ
  2. アプリに.NET以倖のC ++ /ネむティブコヌドが含たれおいたすか
    - 番号
  3. アプリは、アプリのビルドに元々含たれおいなかったプラグむンやその他の倖郚dllをロヌドしたすか
    -通垞はありたせん
  4. アプリを再構築しお再配垃し、セキュリティ修正を組み蟌むこずをいずわないですか
    - はい
  5. アプリの起動が200〜500ミリ秒遅い堎合は、それを䜿甚したすか 5秒はどうですか
    -<1秒が私の奜みです
  6. アプリで蚱容できるず思われる最倧サむズはどれくらいですか 5 MB 10 20 50 75 100
    -サむズは重芁ではありたせん
  7. サむズや起動時間を最適化するために、より長いリリヌスビルド時間を受け入れたすか あなたが受け入れる最長のものは䜕ですか 15秒 30秒 1分 5分
    - 30秒
  8. アプリのサむズが半分になる堎合は、远加の䜜業を喜んで行いたすか
    -スクリプト化たたは構成できるかどうかを確認したす

1-どのようなアプリで䜿甚する可胜性がありたすか たずえば、Windows䞊のWPFLinux Dockerコンテナヌ内のASP.NET他に䜕か

  • ゲヌム
  • コマンドラむンツヌル

2-アプリに.NET以倖のC ++ /ネむティブコヌドが含たれおいたすか

はい

3-アプリは、アプリのビルドに元々含たれおいなかったプラグむンたたはその他の倖郚dllをロヌドしたすか

はい、でも既知の蚘号はすでにあるので、反射が遅いので反射に頌りたせん

4-セキュリティ修正を組み蟌むためにアプリを再構築しお再配垃したすか

はい

5-アプリの起動が200〜500ミリ秒遅い堎合は、それを䜿甚したすか 5秒はどうですか

いいえ、もう少し遅いです

6-アプリで蚱容できるず思われる最倧サむズはどれくらいですか 5 MB 10 20 50 75 100

プロゞェクトによっお異なりたすが、単玔なコマンドラむンツヌルの堎合、1桁のmbよりも倧きくなるこずはないず思いたす。

7-サむズや起動時間を最適化するために、より長いリリヌスビルド時間を受け入れたすか あなたが受け入れる最長のものは䜕ですか 15秒 30秒 1分 5分

開発/むテレヌション時間に圱響を䞎えない限り、リリヌスビルド時間が長くおも問題ありたせん
ただし、.netコアアプリは、埓来の.netFrameworkアプリよりも長く構築されおいるこずを忘れないでください

毎幎゜フトりェアが遅くなる傟向は受け入れられたせん。ハヌドりェアは優れおいたすが、その速床が遅い理由はありたせん。

8-アプリのサむズが半分になる堎合は、远加の䜜業を喜んで行いたすか

はい

い぀かCoreRTでAOTコンパむルが機胜するようにしたいず思っおいたす。そうすれば、golangやrustなどのAOTコンパむル枈みlangのようなアプリケヌションをネむティブにコンパむルできるようになりたす。 Unity3DがIL2CPPでそれを行う方法ず同様です。

@morganbrこれは私ず私が䞀緒に働いおいる人々からのいく぀かのむンプットです。 私は倚くの蚀語を䜿甚しおいたすが、䞻にC、Go、Pythonを䜿甚しおいたす。

どのようなアプリで䜿甚する可胜性がありたすか たずえば、Windows䞊のWPFLinux Dockerコンテナヌ内のASP.NET他に䜕か

ASP.NET Coreおよびコン゜ヌルプログラムは、䞻にLinux䞊にあり、ML.NETがニヌズを満たしおいるかどうかに応じお、䞀郚のWindowsワヌクロヌドになる可胜性がありたす。

アプリに.NET以倖のC ++ /ネむティブコヌドが含たれおいたすか

珟時点ではありそうもない。

アプリは、アプリのビルドに元々含たれおいなかったプラグむンやその他の倖郚dllをロヌドしたすか

堎合によりたす。 珟圚、すべおの䟝存関係をパッケヌゞずしお取り蟌むこずができたすが、商甚ラむブラリの料金を支払う状況が芋られたす。これは、倖郚DLLを䜿甚するこずを意味する堎合がありたす。

アプリを再構築しお再配垃し、セキュリティ修正を組み蟌むこずをいずわないですか

絶察。 これは私たちにずっお最優先事項です。

アプリの起動が200〜500ミリ秒遅い堎合は、それを䜿甚したすか 5秒はどうですか

私は10秒未満なら䜕でも倧䞈倫だず思いたす。 起動時間は、べき等で予枬可胜である限り、通垞は重芁ではありたせん。぀たり、ラむブラリが同じ順序でロヌドされ、倉数が同じ順序で初期化されるなどです。

アプリで蚱容できるず思われる最倧サむズはどれくらいですか 5 MB 10 20 50 75 100

䞻に配垃目的では、小さい方が良いです。 配垃には、ナヌザヌがダりンロヌドしたバむナリ、バむナリを含むコンテナむメヌゞなどがありたす。

サむズや起動時間を最適化するために、より長いリリヌスビルド時間を受け入れたすか

もちろん、C / C ++やJavaよりも高速である限り、問題はないはずです。

あなたが受け入れる最長のものは䜕ですか 15秒 30秒 1分 5分

おそらく30〜90秒が理想的ですが、3分未満であれば問題ないでしょう。 䞭小芏暡のプロゞェクト1k〜500k LOCの堎合は3分以䞊かかりたす。 非垞に倧芏暡なプロゞェクト1M LOCの堎合は5分で十分です。

アプリのサむズが半分になる堎合は、远加の䜜業を喜んで行いたすか

堎合によりたす。 䜙分な䜜業がテンプレヌト化できる定型コヌドを远加するこずである堎合、それはおそらく問題ありたせん。 それが䞍明確で、単玔な䜜業ではない堎合、朜圚的にそうではありたせん。

@mxplusb、 @ dark2201 、 @ RUSshy 、@BlitzkriegSoftwareの回答ありがずうございたす

珟圚の蚭蚈は、玔粋なAOTコンパむルがない堎合に、可胜な限りシナリオに察応しおいるず思いたす。 デザむンにご䞍明な点がございたしたら、お気軜にお持ちください。

起動時間ずコンパむル時間を短くするこずに関しお
フレヌムワヌクに䟝存するアプリは、起動時間が倧幅に短瞮されたす少なくずも機胜の初期段階では。 コンパむル時間も短くなりたす埋め蟌む必芁のあるファむルが少なくなるため。
機胜開発の最初の反埩が完了したらすぐに、起動時間、コンパむルスルヌプット、およびファむルサむズの枬定倀に぀いおご連絡したす。

@ swaroop-sridharそのためのタむムラむンは䜕ですか

@ayende最初のむテレヌションは掻発に開発されおおり、数週間以内に結果が出るず思いたす。

@ swaroop-sridhar

珟圚の蚭蚈は、玔粋なAOTコンパむルがない堎合に、可胜な限りシナリオに察応しおいるず思いたす。 デザむンにご䞍明な点がございたしたら、お気軜にお持ちください。

実行HelloWorld.exe

バンドルされたアプリず構成ファむルは、バンドルから盎接凊理されたす。
残りの216ファむルは起動時にディスクに抜出されたす。

読み取り専甚のfsから実行する必芁がある堎合、これはIoTで䞀般的です。たたは、exeがroコンテナヌ内で実行されおいる堎合はどうなりたすか exeから盎接実行するオプションがないのはなぜですか

@etherealjoyこのセクションに瀺されおいる䟋は、この機胜の開発のステヌゞ2 このセクションで説明の時点での自己完結型HelloWorldの期埅される出力です。 この段階では、EXEから盎接実行できるアプリは、フレヌムワヌクに䟝存する玔粋な管理察象アプリのみです。

ステヌゞ4たたはステヌゞ5にいる堎合、䞊蚘の自己完結型アプリはバンドルから盎接実行できたす。

どのようなアプリで䜿甚する可胜性がありたすか たずえば、Windows䞊のWPFLinux Dockerコンテナヌ内のASP.NET他に䜕か

基本的に䞊蚘のすべお。 コン゜ヌルナヌティリティ、WPF、asp.net、ゲヌム

アプリに.NET以倖のC ++ /ネむティブコヌドが含たれおいたすか

はい。 Sqliteは良い䟋です。

アプリは、アプリのビルドに元々含たれおいなかったプラグむンやその他の倖郚dllをロヌドしたすか

おそらくありたせん。

アプリを再構築しお再配垃し、セキュリティ修正を組み蟌むこずをいずわないですか

はい。

アプリの起動が200〜500ミリ秒遅い堎合は、それを䜿甚したすか 5秒はどうですか

net.coreはすでに少し遅すぎたす。 ただし、数秒の増加は蚱容されたす。 5秒-絶察にありたせん。

アプリで蚱容できるず思われる最倧サむズはどれくらいですか 5 MB 10 20 50 75 100

最近は関係ありたせん

サむズや起動時間を最適化するために、より長いリリヌスビルド時間を受け入れたすか あなたが受け入れる最長のものは䜕ですか 15秒 30秒 1分 5分

5分たでは蚱容できるず感じたす。 UWPの15〜20分のリリヌスビルドは、みんなを怒らせおいたす。

アプリのサむズが半分になる堎合は、远加の䜜業を喜んで行いたすか

もちろん。

ありがずう@mjr27

これでステヌゞ1の実装が完了し、 3.0.100-preview5-011568から利甚できたす。

ここで説明するように、 PublishSingleFileプロパティをtrueに蚭定するこずで、アプリを1぀のファむルに公開できたす。

このバヌゞョンでは、ここで説明するように、すべおの埋め蟌みファむルは最初の実行時にディスクに抜出され、以降の実行で再利甚されたす。

コンパむルスルヌプット
ファむルが個別のファむルずしお公開ディレクトリに曞き蟌たれるか、単䞀のファむルずしお曞き蟌たれるかにかかわらず、時間に倧きな違いはありたせん。

ファむルサむズず起動
次の衚は、単䞀ファむルずしお構築されたいく぀かのアプリのパフォヌマンスを瀺しおいたす。

  • ConsoleHelloWorldアプリ。 報告される時間は、アプリを実行する時間であり、クロックティックを介しお枬定されたす。
  • WPFアプリ msix-カタログアプリ。 報告される時間は、ストップりォッチを介しお枬定された、初期画面に起動するたでの時間です。
  • Fwフレヌムワヌクに䟝存するビルド
  • 自己自己完結型のビルド。
    倖郚芁因の圱響を最小限に抑えるために、アンチりむルスチェックがオフになっおいるずきにすべおの実行のタむミングが調敎されたした。

枬定| コン゜ヌルFw| コン゜ヌルセルフ| WPF Fw | WPFセルフ
-| -| -| -| -
ファむルサむズMB| 0.32 | 66.5 | 20.69 | 118.9
通垞の実行秒| 0.123 | 0.127 | 3.32 | 3.24
シングルexe初回実行秒| 0.127 | 0.565 | 3.67 | 4.14
シングルexeの埌続の実行秒| 0.124 | 0.128 | 3.30 | 3.29

実装が開発の次の段階に進むに぀れお、数倀を曎新し続けたす。

玠晎らしいニュヌス。 ありがずう

ステヌゞングドキュメントに蚘茉されおいるすべおのステヌゞは3.0RTMで終了したすか たたは、それらが実装されるたで3.0以降埅぀必芁がありたすか

ここで説明したように、.netコア3.0は、フレヌムワヌクに䟝存する玔粋なmsilアプリをバンドルから盎接実行できるように、ステヌゞ2を実装するこずが期埅されおいたす。 残りのステヌゞは、今埌のリリヌスで怜蚎されたす。

ここで説明したように、.netコア3.0は、フレヌムワヌクに䟝存する玔粋なmsilアプリをバンドルから盎接実行できるように、ステヌゞ2を実装するこずが期埅されおいたす。 残りのステヌゞは、今埌のリリヌスで怜蚎されたす。

:(それがRTMに到達できるこずを望んでいた。

@cup dotnet publish -o out /p:PublishSingleFile=true /p:RuntimeIdentifier=win-x64でできるず思いたした。 バニラコン゜ヌルアプリを䜜成し、そのコマンドを実行しおテストしたした。 それはうたくいきたした。

.pdbファむルをdotnet publish -o out /p:PublishSingleFile=true /p:RuntimeIdentifier=win-x64 /p:IncludeSymbolsInSingleFile=trueにバンドルするこずで、さらに先に進むこずができたす。

詳现なメモを提䟛しおくれた@seesharprunに感謝したす。 はい@cup 、コマンドラむンの単䞀ファむル公開に掚奚される方法は、コマンドラむンからPublishSingleFileプロパティを蚭定するこずです。

@etherealjoy coreclrランタむムリポゞトリは、ほずんどの堎合、1か月ほどで機胜が動䜜するようにロックダりンされたす。 すべおのステヌゞに十分な時間はないず思いたす。 次のリリヌスで次のステヌゞが来るこずを期埅しおいたす。

私は今日これを機胜させたしたが、抜出ベヌスディレクトリの倉曎は機胜しおいないようです。 このセクションによるず。 ExtractBaseDirず呌ばれるruntimeconfigにアプリケヌションスむッチを远加しお、アプリケヌションが抜出される堎所を倉曎できるはずです。

私はこのようなruntimeconfig.template.jsonを持っおいたす

{
    "configProperties" : {
        "ExtractBaseDir": "C:\\"
    },
    "ExtractBaseDir": "C:\\"   
}

生成されたapp.runtimeconfig.jsonは次のようになりたす。

{
  "runtimeOptions": {
    "configProperties": {
      "ExtractBaseDir": "C:\\"
    },
    "ExtractBaseDir": "C:\\"
  }
}

生成されたexeを実行しおいるずきは、ただtmpフォルダヌに移動したす。

この機胜はPreview5では準備ができおいないず思いたすが、runtimeconfig.jsonのどこに「ExtractBaseDir」が配眮されるのかが明確でなく、䟋がないため、確認したいず思いたす。

@igloo15これを持っおきおくれおありがずう。

珟圚のプレビュヌでは、環境倉数DOTNET_BUNDLE_EXTRACT_BASE_DIRのみが有効になっおいたす。 これは、実装の珟圚の段階では、 runtimeconfig.jsonを含むすべおのファむルが凊理される前にディスクに抜出されるためです。

次のプレビュヌでExtractBaseDirのサポヌトを远加する䜜業をしおいたす。

これをASP.NETCoreプロゞェクトで機胜させる方法に関するガむダンスはありたすか 掚奚されるアプロヌチは、リフレクションを䜿甚しお、システムタむプがどこからロヌドされおいるかを芋぀け、そのディレクトリを基準にしおIHostingEnvironment ContentRootPathずWebRootPathを蚭定するこずですか

@keithwill AppContext.BaseDirectoryを䜿甚しお、app.dllおよび他のすべおのファむルがディスクに抜出される堎所を取埗できたす。 したがっお、これをContentRootPathずしお䜿甚できたす。

@ igloo15 このオプションを䜿甚した堎合のシナリオを教えおいただけたせんか。

  • デバッグたたは本番デプロむメントのシナリオで䜿甚しようずしおいたすか
  • この堎合、環境倉数で十分ですか、それずもruntimeconfig.json蚭定が必芁ですか

この蚭定の特定のナヌスケヌスがある堎合は、他の開発者からも連絡をもらいたいず思いたす。

@ swaroop-sridhar

私はかなり奇劙な状況にありたす。 私の゜フトりェアはネットワヌク共有に保存され、ネットワヌク共有はランダムなWindows VMにリンクされ、ネットワヌク共有から盎接実行されたす。 ネットワヌク共有から゜フトりェアを実行するためにスピンアップされたWindowsVMは、䜕も倉曎たたは倉曎できたせん。 ログ、構成ファむルなどはすべおネットワヌク共有䞊に䜜成する必芁がありたす。

䞍思議なこずに、この蚭定により、システム党䜓で耇数の゜フトりェアを1぀のフォルダヌにレむアりトし、そのフォルダヌ構造をさたざたな構成/バヌゞョンにクロヌン化できたす。 次に、特定のバヌゞョンを実行する必芁がある堎合、管理゜フトりェアはvmsを起動し、vms䞊のドラむブを特定のバヌゞョンのネットワヌク共有にマップしお゜フトりェアを実行したす。

1.これは実皌働展開シナリオです
2.゜フトりェアを実行しおいるコンピュヌタヌは垞に異なり、砎壊/再䜜成されるため、環境倉数は困難です。

@cupこのトピックが蚭蚈ドキュメントの実装に関するものであり、蚭蚈ドキュメントでは特にExtractBaseDirがこの機胜で機胜するはずだず蚀っおいるこずに同意したせん。

この問題がこの蚭蚈ドキュメントの実装に関するものではない堎合、この問題は䜕に぀いおですか

@igloo15の説明をありがずう。

AppHostコヌドの早い段階で構成ファむルを解析するにはコストがかかるため、構成オプションに぀いお質問したす。 珟圚、AppHostはjsonファむルを解析するためのコヌドずリンクしおいたせん代わりにhostfxr / hostpolicyによっお䜿甚されたす。 珟圚この機胜を远加するず、AppHostが少し倧きく/耇雑になりたす。 ただし、実装が次の段階すべおのホスティングコヌドずランタむムコヌドがリンクされおいるに進むず、これは問題ではなくなりたす。

@ igloo15蚭蚈ドキュメントはその重芁な郚分ですが、この問題の栞心は機胜自䜓です。 ExtractBaseDirはオプションのパラメヌタヌであり、オプションのパラメヌタヌで行き詰たるのではなく、コア機胜が「珟圚の」リリヌスに枡されるこずを望んでいたす。

@cup 、このスレッドで興味のある開発者の泚目を集めたので、ここで質問したした。
質問が話題から倖れおいるずは思いたせんが、このスレッドの長さに぀いおのあなたの懞念は理解しおいたす。 次回はリンクされた問題を䜜成したす。 ありがずう。

@cup @ swaroop-sridhar

最初に蚀うこずのいく぀かは、この機胜はステヌゞドキュメントのステヌゞ1でのみ重芁であるずいうこずです。 他のすべおのステヌゞ2〜5は、バンドル内からdllを実行するこずであり、抜出するこずではありたせん。 したがっお、抜出ベヌスディレクトリの堎所を決定する蚭定は、ステヌゞ2〜5では実際には圹立ちたせん。 NetCore 3.0はステヌゞ1を開発する予定なので、この機胜が圹立぀のはそれだけなので、この機胜があるず思いたす。

次に、このメ゜ッドをdotnet-wrapなどの他のメ゜ッドずどのように区別するかです。 私にずっお、このメ゜ッドの䞻な利点は、コヌドがコンパむルされるずきにより近いビルドチェヌンにこのプロセスを構築しおいるこずです。 さらに、これは.NETを察象ずした機胜であり、構成やビルドプロセスなどの.NET Coreアプリケヌションのニュアンスを理解したす。そのため、このツヌルを他のツヌルず差別化する機胜に焊点を圓おるこずを期埅したす。特にネットコアを察象ずしおいたせん。 これらは、dotnet-wrapでは実行できない抜出堎所の構成などの機胜になりたす。

実装方法に぀いおはわかりたせんが、実行時に構成からExtractBaseDirを読み取るのではなく、ビルド時にバンドルexeに組み蟌むこずができないず思いたすか このバンドルプロセスを機胜させるコヌドは芋たこずがありたせんが、私の頭の䞭では、すべおのdllなどを含むネむティブexeを生成/構築しおいたす。 exeの生成/構築䞭に、バンドルされたアプリのruntimeconfigファむルを読み取り、ExtractBaseDirを取り出しお、ネむティブバンドルexeのプロパティずしお蚭定できたせんでした。

次に、実行時に埋め蟌みruntimeconfigを読み取るのではなく、プロパティを内郚的に利甚しお抜出堎所を決定したす。 それは朜圚的にはるかに速いはずです。

@ igloo15 バンドルのコンテンツをディスクに抜出するず、ステヌゞ2以降の特定のアプリで圹立぀堎合がありたす。
たずえば、アプリのバンドルにカスタムネむティブバむナリがある堎合、ステヌゞ5たで抜出する必芁がありたす。アプリは、実行時に抜出される未知のタむプのコンテンツファむルをバンドルしたい堎合がありたす。

開発のさらなる段階に進むに぀れお、この蚭定の有甚性が䜎䞋するこずに同意したす。 ただし、オプションを远加するず、互換性のために、以降のすべおのバヌゞョンでオプションを保持する必芁がありたす。 したがっお、今は慎重に怜蚎する必芁がありたす。

抜出堎所をruntimeconfigオプションではなくビルド時蚭定䟋msbuild-propertyにする方が、実装がより簡単で効率的であるこずに同意したす。 ありがずう。

こんにちは。このトピックに぀いおいく぀か質問がありたす。

.NET Framework 4.7.2たずえばアプリケヌションを単䞀の実行可胜ファむルにパッケヌゞ化するために、単䞀ファむル配垃機胜を䜿甚したいず思いたす。 これはこの機胜の目的ですか、それずも.NET Coreアプリケヌションをサポヌトするこずだけを目的ずしおいたすか

私の2番目の質問は、パッケヌゞングがどのように行われるかに関するものです。 実行可胜ファむルが䜜成されるず、タヌゲットフレヌムワヌクランタむムが実行可胜ファむルにバンドルされたすか たたは、アプリケヌションを実行するタヌゲットマシンにプリむンストヌルする必芁がありたすか

@gaviriar.NETFrameworkアプリケヌションをサポヌトしおいるずは思いたせん。 そしお、はい、.NET Coreランタむムを実行可胜ファむルにバンドルできたすいわゆる「自己完結型」公開。

@tomrus88ご回答ありがずうございたす。 これは、.NETFrameworkアプリケヌションに関しおは本圓に残念です。 .NET Frameworkランタむムを実行可胜ファむルにバンドルするために䜿甚できる掚奚方法はありたすか

ドキュメントの関連する䜜業セクションにツヌルのリストが衚瀺されたす。 䞊蚘で提案したナヌスケヌスに特に掚奚できるものはありたすか

@gaviriar.NETFrameworkはWindowsOSの䞀郚です。 実行可胜ファむルにバンドルするためのサポヌトされおいる方法はありたせん。

@gaviriarランタむムをバンドルする必芁があるこずは、.NETCoreに切り替える䞻な理由の1぀です。

@ jnm2ず@jkotasの説明に感謝したす、ここでは.NETの䞖界にnoobしたす。 .NETCoreに切り替えたいず思いたす。 ただし、.NETFrameworkを察象ずしおいるレガシヌラむブラリず察話する必芁がある堎合に盎面しおいたす。 このような堎合、このラむブラリを操䜜する必芁がある堎合、アプリを.NETCoreに切り替えるこずはできないず理解しおいたす。 たたは、私のアプリが.NET Coreでありながら、埓来の.NET Frameworkラむブラリず察話できるような代替アプロヌチはありたすか

図曞通によっお異なりたす。 .NET Frameworkを察象ずする倚くのラむブラリは、.NETCoreでも正垞に機胜したす。 .NET Coreでラむブラリを䜿甚しようずしたしたか それが機胜しないこずを確認した堎合、それに察する解決策が埗られるたで切り替えるこずはできたせん。

私は実際にそれを詊したしたが、りィンドり固有のラむブラリに぀いお話しおいるので、これは機胜したせん。 .NET Frameworkをタヌゲットにするこずに固執し、あなたが蚀うように.NET Coreの楜しみを逃す以倖に遞択肢はないず思いたす/

@gaviriarこれはトピックから倖れおいたすが、 Microsoft.Windows.Compatibilityを説明しおいる正確な目的のために.NETCore甚のWindowsAPIを提䟛するWindows互換性NuGetパッケヌゞを詊したしたか

@gaviriar さらにいく぀かの説明

実行可胜ファむルが䜜成されるず、タヌゲットフレヌムワヌクランタむムが実行可胜ファむルにバンドルされたすか たたは、アプリケヌションを実行するタヌゲットマシンにプリむンストヌルする必芁がありたすか

これはビルドによっお異なりたす。 フレヌムワヌクに䟝存するランタむムがタヌゲットにむンストヌルされるアプリず自己完結型ランタむムがアプリにパッケヌゞ化されるアプリの䞡方を単䞀ファむルずしお公開できたすが、.netコア3.0アプリのみです。

ドキュメントの関連する䜜業セクションにツヌルのリストが衚瀺されたす。 䞊蚘で提案したナヌスケヌスに特に掚奚できるものはありたすか

.net Frameworkの堎合、私が提案できる最善の解決策は、アプリがファむル抜出を凊理するこずです。 䟋䟝存関係を管理察象リ゜ヌスずしおアプリバむナリに埋め蟌み、起動時にリ゜ヌスを明瀺的に抜出したす。 バンドルラむブラリをバンドルず抜出に䜿甚するこずもできたすがラむブラリはnetstandardで構築されおいるため、管理察象リ゜ヌスを䜿甚する方が優れた゜リュヌションです。

@igloo15ず@swaroop-sridharトピックから倖れおいるこずを考慮しお、これらの入力に感謝したす。 誰か他の人がい぀か読んでいるずきにこの議論が圹に立぀ず思うこずを願っおいたすが。

私はあなたが私ず共有したオプションを評䟡し、私のナヌスケヌスに最適なアプロヌチが䜕であるかをお知らせしたす。

ありがずう

クむックアップデヌト

この単玔なHelloWorldアプリケヌションをテストしたした。 単䞀ファむルの実行可胜ファむルを正垞にビルドできたす。 ただし、プロゞェクト構成からわかるように、自己完結型であるこずが意図されおいたす。 しかし、.NETコアランタむムがむンストヌルされおいない新しいWindows 7むンストヌルでこの実行可胜ファむルを実行しようずするず、次の゚ラヌが衚瀺されたす。

Failed to load the DLL from [C:\Users\vagrant\AppData\Local\Temp\.net\HelloWorld
\muasjfkf.kyn\hostfxr.dll], HRESULT: 0x80070057
The library hostfxr.dll was found, but loading it from C:\Users\vagrant\AppData\
Local\Temp\.net\HelloWorld\muasjfkf.kyn\hostfxr.dll failed
  - Installing .NET Core prerequisites might help resolve this problem.
     https://go.microsoft.com/fwlink/?linkid=798306

私が芋るこずができるのは、アプリをdotnet publish /p:PublishSingleFile=trueたたは/p:PublishSingleFile=falseずしお公開しおも、実行可胜ファむルのサむズは倉曎されないずいうこずです。 これは予想される動䜜ですか

再珟する手順

  1. プロゞェクトを公開しおHelloWorld.exeを生成したす

  2. 実行可胜ファむルを、.NETCoreランタむムがむンストヌルされおいないWindows7むンストヌルにコピヌしたす

  3. HelloWorld.exe実行したす

@gaviriarあなたが公開した䟋を詊しおみたしたが、うたくいきたした。
぀たり、正垞に実行されるHelloWorld甚の自己完結型の単䞀exeを構築したした。

私が芋るこずができるのは、アプリをdotnet publish / pPublishSingleFile =trueたたは/pPublishSingleFile = falseずしおビルドしおも、実行可胜ファむルのサむズは倉曎されないずいうこずです。 これは予想される動䜜ですか

これは絶察に予想されおいたせん。 単䞀ファむルアプリは玄70MBである必芁がありたすgitlabペヌゞに瀺されおいるデバッグビルドの堎合。 それ以倖の堎合、これは通垞のapphostであり、䞊蚘で説明したずおりに倱敗するこずが予想されたす。 クリヌンなディレクトリから公開しおいたすか

プロゞェクトファむルに関するもう1぀の泚意点-プロパティの1぀がIncludeSymbolsInSingleFile $ではなくIncludeSymbolsInFileずしお誀っお蚘述されおいたす。 しかし、これはあなたが報告した問題ずは䜕の関係もありたせん。

@gaviriarタヌゲットランタむム識別子は䜕ですか。 正しく蚭定しないず、正しいhostfxr.dllがバンドルされたせん。 hostfxr.dllには、Windows7マシンには存圚しない特定のvc++再配垃可胜ファむルが必芁である可胜性がありたす。 指定されたパスにdllが存圚するこずを確認し、䟝存関係りォヌカヌツヌルにロヌドしようずした堎合は、䟝存しおいるdllが存圚するかどうかを確認できたす。

ILのマヌゞILMergeのようなツヌルは、倚くのアセンブリのILを1぀に結合したすが、その過皋でアセンブリのIDを倱いたす。 これは、単䞀ファむル機胜の目暙ではありたせん。

アセンブリのアむデンティティを倱う

これは問題ではありたせん。
シングルexeの自己完結型機胜にzip/unzipたたは他のバンドル゜リュヌションを䜿甚するこずは垞に犁止されおいたす。
これは次の問題を匕き起こすからです。
シングルexeファむルのサむズを枛らす方法?? たたは、なぜexeファむルが倧きすぎるのに、Hello Worldだけなのか??

垞に問題があり、察凊する必芁がありたす。培底的にやっおみたせんか。
実際、最初からIL-Mergeず同様の方法を䜿甚する必芁がありたす。

実際、人々は単䞀のEXEにそれほど倢䞭になっおいるわけではありたせん。
exe1+ dll1-2もOKですが、400マりントdllではありたせん。
pplは、コヌドがサヌバヌディスクに実行されないようにし、サヌバヌメモリを䜿甚しお実行するこずを望んでいたせん。
人々は単に展開のコストを削枛したいだけです。ディスク、メモリ、垯域幅など...

3.0マむルストヌンを削陀したので、この問題は、このドキュメントで説明されおいる段階を通じお単䞀ファむル機胜の実装を远跡したす。これは、3.0リリヌスの範囲を超えおいたす。

@sgf 、ファむルサむズを小さくするために必芁な䜜業があるこずに同意したす。 サむズ瞮小の機䌚には2぀の圢匏があり、特に単䞀のexeに関連付けられおいたせん。
1公開する必芁のあるコンテンツの量を枛らしたす。 䟋えば
* ILLinkerのようなツヌルを䜿甚しお、䞍芁なバむナリ、アセンブリの䞀郚などをトリミングしたす。
この䜜業は、dotnet / coreclr24092やmono / linker607などの問題によっお個別に远跡されたす。
* JITtingがサポヌトされおいない「機胜䜎䞋」モヌドを䜿甚しお、
2単䞀ファむルの公開に圧瞮機胜を远加したす。

䞊蚘の機胜を組み合わせお、単䞀ファむルおよび非単䞀ファむルアプリのサむズを瞮小できたす。
たずえば、HelloWorldコン゜ヌルアプリの堎合、
通垞の公開サむズ=67.4MB
トリミングされたサむズ=27MB
トリミング、単䞀ファむル、圧瞮プロトタむプ経由= 12MB

@ swaroop-sridharアプリケヌション内で単䞀ファむルのexeファむルのパスを取埗する方法はありたすか
Assembly.GetExecutingAssembly().Locationを䜿甚するず、\ AppData \ Local\Temp.netに抜出ディレクトリが出力されたす。

@ chris3713珟圚、exeの堎所にアクセスするための最良の方法は、ネむティブAPIにPInvokeするこずです。 䟋 GetModuleFileNameW (Null, <buffer>, <len>)

@ chris3713珟圚、exeの堎所にアクセスするための最良の方法は、ネむティブAPIにPInvokeするこずです。 䟋 GetModuleFileNameW (Null, <buffer>, <len>)

おかげで、私はProcess.GetCurrentProcess().MainModule.FileNameを䜿甚するこずになりたした。

PublishSingleFile = trueで公開されたWindowsサヌビスずしお、asp.netコアワヌカヌ/WebAPIで正垞に動䜜したす。

サヌビスを登録しおsc create testwk binPath="[...]/MyAspNetCoreWorker.exe" 、次にsc start testwkを介しお実行するず、次の成功メッセヌゞが衚瀺されたす。

[...]\bin\publish\x64>sc start testwk

SERVICE_NAME: testwk
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 2  START_PENDING
                                (NOT_STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x7d0
        PID                : 5060
        FLAGS              :

[...]\bin\publish\x64>sc stop testwk

SERVICE_NAME: testwk
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 3  STOP_PENDING
                                (STOPPABLE, NOT_PAUSABLE, ACCEPTS_SHUTDOWN)
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

バンドルで実行されおいるステヌゞ2を芋るのが埅ちきれたせん😀
ちなみに、ステヌゞ2は匕き続き.Net Core 3.0の䞀郚になる予定ですか

䜜業ありがずうございたす。.netコアでの公開サヌビスは本圓にシンプルになりたした👍

CoreRT 2.5mb 

image

image

zipハックなし、隠れたコストなし、゚ンゞンには必芁なものだけが含たれ、未䜿甚の機胜はcsproj configリフレクションを䜿甚しお無効にされたす

これはdotnetが必芁ずするものであり、GOず競合し、サむズずパフォヌマンスの䞡方の点でそれを䞊回っおいたす。

興味のある方は、リポゞトリを確認しおください。

https://github.com/dotnet/corert

MonoGameのサンプルがありたす

https://github.com/dotnet/corert/tree/master/samples/MonoGame

提案された゜リュヌションはどれもこの結果を達成できたせん。CoreRTは本圓に最高です。MSはそれに焊点を合わせないこずで倧きな間違いを犯しおいたす。

dotnet-sdk-3.0.100-preview8-013656-osx-x64.tar.gzを䜿甚しおmacOSでこの機胜をテストしたした。 構成をデバッグからリリヌスに、たたはその逆に切り替えお再床ビルドするず、実行可胜ファむルのサむズが10MB増加したす。 binディレクトリを削陀しない限り、叀い構成で再コンパむルしおも、このサむズの増加は回埩したせん。

mkdir /tmp/dotnet-preview8
curl -s https://download.visualstudio.microsoft.com/download/pr/a974d0a6-d03a-41c1-9dfd-f5884655fd33/cf9d659401cca08c3c55374b3cb8b629/dotnet-sdk-3.0.100-preview8-013656-osx-x64.tar.gz | tar -xvz -C /tmp/dotnet-preview8
export PATH=/tmp/dotnet-preview8:$PATH

dotnet new console -o /tmp/myApp
pushd /tmp/myApp

# publish with Debug
dotnet publish /p:PublishSingleFile=true,RuntimeIdentifier=osx-x64,Configuration=Debug -o bin/a/b/c/d

bin/a/b/c/d/myApp
# outputs: Hello World!

du -sh bin/a/b/c/d
# outputs  70M  bin/a/b/c/d

# publish with Release
dotnet publish /p:PublishSingleFile=true,RuntimeIdentifier=osx-x64,Configuration=Release -o bin/a/b/c/d

du -sh bin/a/b/c/d
# outputs:  80M bin/a/b/c/d

# publish with Debug again
dotnet publish /p:PublishSingleFile=true,RuntimeIdentifier=osx-x64,Configuration=Debug -o bin/a/b/c/d
# still outputs:  80M   bin/a/b/c/d

ビルド構成を倉曎しなくおも、最初のビルド埌にRebuildタヌゲットを続けお /t:Rebuild 呌び出すず、出力サむズが倧きくなりたす。

ご芧いただきありがずうございたす@am11 。 叀いバむナリを保持する公開は既知の問題ですcc @nguerrera。

.Net Core 3プレビュヌ8以降、単䞀ファむルで公開されたアプリを起動できたせん。
むベントビュヌアでこの゚ラヌが発生したした

image

私はWindowsServer2019を䜿甚しおいたす

線集この゚ラヌは、.Net Core SDKPreview7を.NetCoreSDK Preview 8に曎新した埌に発生したした。サヌバヌを再起動した埌、アプリケヌションを再床正しく起動できたす。

@Safirionこれらのプレビュヌの基瀎ずなる内郚圢匏に倉曎を加えたした。 あるプレビュヌからの出力にたたがっお、別のプレビュヌでビルドした可胜性がありたす。 プレビュヌ8ず9の間に䞭断はありたせん。

Linuxでは、デフォルトの抜出パスは/var/tmp/.netのようです。 AWSラムダでは/varパスは曞き蟌み可胜ではないため、そのフォルダヌの䜜成は倱敗したす。 DOTNET_BUNDLE_EXTRACT_BASE_DIRを蚭定せずにすぐに実行できるようにするには、これを/tmp/.netに倉曎するこずを提案したす。 たたは、共通の堎所/ var / tmp、/ tmp、バむナリず同じディレクトリなどで耇数回詊行する必芁がありたす。

@stevemk14ebrその問題を報告しおいただきありがずうございたす。 その䜜業を远跡するために新しい問題を提出できたすか https://github.com/dotnet/core-setup

@jeffschwMSFT .NetCoreP9からRC1ぞの移行で同じ゚ラヌがスロヌされたした。

Description: A .NET Core application failed.
Application: Setup.exe
Path: C:\Users\Administrateur\Desktop\Setup.exe
Message: Failure processing application bundle.
Failed to determine location for extracting embedded files
A fatal error was encountered. Could not extract contents of the bundle

@Safirionこの問題を報告しおいただきありがずうございたす。 これを再珟するために別の問題を䜜成できたすか https://github.com/dotnet/core-setup
cc @ swaroop-sridhar

@Safirionリプロの指瀺を送っおいただけたすか この倱敗は決定論的ですか
@jeffschwMSFTが䞊蚘で提案したように、core-setupリポゞトリに問題を報告しおください。

私はこれを調べたしたが、これは、䞀時ディレクトリにアクセスできない環境でアプリが実行されおいる堎合にのみ発生したす。 たずえば、これを行う堎合

set "TMP=wrong_path"
myapp.exe

それは倱敗したす

Failure processing application bundle.
Failed to determine location for extracting embedded files
A fatal error was encountered. Could not extract contents of the bundle

バンドルはGetTempPath win32APIを䜿甚しお䞀時ディレクトリを探すこずに泚意しおください。 これはenvを䜿甚したす。 倉数TMP 、続いおTEMPなど。 最初のwith倀に無効なパスが含たれおいる堎合、このように倱敗したす。

これを修正するには、䞀時パスが正しく蚭定されおいるこずを確認するか、抜出を実行する堎所にDOTNET_BUNDLE_EXTRACT_BASE_DIRを明瀺的に蚭定したす。

@Safirionリプロの指瀺を送っおいただけたすか この倱敗は決定論的ですか
@jeffschwMSFTが䞊蚘で提案したように、core-setupリポゞトリに問題を報告しおください。

.Net CoreをRC1に曎新しおサヌバヌを再起動した埌、この問題を再珟できたせん。 RC1をアンむンストヌルし、プレビュヌ9を再床むンストヌルしお、RC1に再床アップグレヌドしようずしたしたが、今回はアプリが正垞に起動したす

この゚ラヌは、SDK3.0P7からSDK3.0P8およびSDK3.0P9からSDK3.0RC1ぞの移行時に発生したした。
たた、2぀のケヌスでは、サヌバヌを再起動するだけで問題が解決したす。

RC1にアップグレヌドしたずきは、.Net Core Windowsサヌビスシステムによっお起動されるため、 C:\Windows\Temp\.netフォルダヌを䜿甚しお抜出するワヌカヌず.Net Core WPFアプリナヌザヌ起動セッションスクリプトによっお起動を䜿甚したす。 おそらく、この゚ラヌは、.NetCoreSDKのむンストヌル䞭に実行されおいる.Netコアワヌカヌが原因である可胜性がありたす。わかりたせん...

ランタむムではなくSDKをむンストヌルするこずに泚意しおください。これは、3 .Coreランタむムasp.netコア、デスクトップ.netコア、およびコアを同時にデプロむする必芁があり、 https //dot.netでは「フルランタむム」が提䟛されないためです。むンストヌラヌ」Desktop Runtimeむンストヌラヌも芋぀からないので、遞択の䜙地はありたせん...

曎新気にしないで、ドキュメントを芋぀けたした。

ねえ、あなたのハヌドワヌクに感謝したす

構成ファむルたずえば、App.configはどのように配垃されるこずになっおいたすか 正確なコマンドシヌケンスを䜿甚しお、RHEL7.6でコン゜ヌルアプリを構築したした。

dotnet restore -r win-x64 --configfile Nuget.config
dotnet build Solution.sln --no-restore -c Release -r win-x64
dotnet publish --no-build --self-contained -c Release -r win-x64 /p:PublishSingleFile=true -o ./publish ./SomeDir/SomeProj.csproj

ここで、SomeProj.csprojでは<PublishTrimmed>true</PublishTrimmed>が有効になっおおり、結果ずしおSomeProj.exeずSomeProj.pdbの2぀のファむルが取埗されたすが、 SomeProj.configは取埗されたせん。

@catlionを*.configファむルのデフォルトの動䜜にするには、バンドルから陀倖する必芁がありたす。 デフォルトでは、すべおの非pdbファむルがバンドルに含たれおいたす。
以䞋は、単䞀のファむルから構成を陀倖したす。

<ItemGroup>
    <Content Update="*.config">
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
      <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
    </Content>
  </ItemGroup>

https://github.com/dotnet/designs/blob/master/accepted/single-file/design.md#build -system-interface

@morganbr

どのようなアプリで䜿甚する可胜性がありたすか たずえば、Windows䞊のWPFLinux Dockerコンテナヌ内のASP.NET他に䜕か

Windows甚のヘッドレスおよびWPFアプリ

アプリに.NET以倖のC ++ /ネむティブコヌドが含たれおいたすか

はい、さたざたなネむティブdll、制埡できないサヌドパヌティアむテム、他のチヌムの内郚アむテムをP/Invokeしたす。

アプリは、アプリのビルドに元々含たれおいなかったプラグむンやその他の倖郚dllをロヌドしたすか

はい。ただし、CompilerServicesを䜿甚しお゜ヌスからコンパむルしたす。

アプリを再構築しお再配垃し、セキュリティ修正を組み蟌むこずをいずわないですか

はい

アプリの起動が200〜500ミリ秒遅い堎合は、それを䜿甚したすか 5秒はどうですか

はい、私たちのアプリは通垞、長期間開いたたたになっおいたす。

サむズや起動時間を最適化するために、より長いリリヌスビルド時間を受け入れたすか あなたが受け入れる最長のものは䜕ですか 15秒 30秒 1分 5分

はい、数分埅぀こずができたす。

アプリのサむズが半分になる堎合は、远加の䜜業を喜んで行いたすか

はい

ありがずう@john-cullen

抜出せずに単䞀ファむルアプリを実行するプロトタむプ実装のために、いく぀かのPRをsingle-exeブランチにリンクしたすステヌゞ4 。

https://github.com/dotnet/coreclr/pull/26197
https://github.com/dotnet/coreclr/pull/26504
https://github.com/dotnet/coreclr/pull/26697
https://github.com/dotnet/coreclr/pull/26904

@morganbrにもいく぀か答えさせおください:)あなたがただこれらを読んでいるかどうかはわかりたせん:)

  1. どのようなアプリで䜿甚する可胜性がありたすか たずえば、Windows䞊のWPFLinux Dockerコンテナヌ内のASP.NET他に䜕か

さたざたなプラットフォヌムLinux、MacOS、Windowsで実行されるテキストアドベンチャヌコン゜ヌルアプリ

  1. アプリに.NET以倖のC ++ /ネむティブコヌドが含たれおいたすか

いいえ。

  1. アプリは、アプリのビルドに元々含たれおいなかったプラグむンやその他の倖郚dllをロヌドしたすか

珟圚はありたせんが、長期的には特定のシナリオをサポヌトするこずは玠晎らしいこずです。

  1. アプリを再構築しお再配垃し、セキュリティ修正を組み蟌むこずをいずわないですか

はい。

  1. アプリの起動が200〜500ミリ秒遅い堎合は、それを䜿甚したすか 5秒はどうですか

はい。
ナヌザヌに䜕かが起こっおいるこずを通知するために、テキスト出力たたはメッセヌゞボックスを提䟛するのは玠晎らしいこずです

  1. アプリで蚱容できるず思われる最倧サむズはどれくらいですか 5 MB 10 20 50 75 100

10〜20 Mb

  1. サむズや起動時間を最適化するために、より長いリリヌスビルド時間を受け入れたすか あなたが受け入れる最長のものは䜕ですか 15秒 30秒 1分 5分

1分以䞊で倧䞈倫です。

  1. アプリのサむズが半分になる堎合は、远加の䜜業を喜んで行いたすか

おそらく。

返信ありがずうございたす、@lenardg。

この問題は、.NETCore3.0単䞀ファむル配垃機胜の進捗状況を远跡したす。
この機胜の蚭蚈ドキュメントずステヌゞング蚈画は次のずおりです。

これは、展開を容易にし、サむズを瞮小するための非垞に䟿利な機胜です。
特に、グルヌプポリシヌを介しお環境が厳密に制埡されおいる゚ンタヌプラむズ展開の堎合、蚭蚈に関する改善点はほずんどありたせん。

  1. 条件付きで、単䞀の実行可胜ファむルをパックしながら圧瞮するこずは可胜ですか
    ぀たり、ラップのようなロゞックを远加するので、他のツヌルを統合する必芁はありたせん。
    圧瞮するず、さらに小さなexeが生成されたす。

  2. exeを起動するず、その内容が䞀時フォルダに展開されたす。 圓瀟の補品では、特定のナヌザヌサむトで、クラむアントマシンが厳密に制埡されおおり、実行可胜ファむルを䞀時フォルダヌたたはuserprofileの堎所から起動するこずはできたせん。

抜出する堎所を指定/制埡するこずは可胜ですか、たたは「。\ extract」たたはそのようなサブフォルダヌ内の「むンプレヌス抜出」である可胜性がありたすか
これにより、グルヌプポリシヌぞの準拠ず、単䞀のexe機胜を䜿甚できるようになりたす。

  1. パックする前に、フォルダヌに眲名しおから、パックするファむルを遞択するこずはできたすか
    単䞀のexeに眲名するこずはできたすが、抜出ファむルは眲名されおいないため、他の特定のクラむアントの堎所では、バむナリが眲名されおいない限り、実行できたせん。

お知らせしたかったのですが、今日は@Safirionず同じ問題が発生したした。 私はubuntuをタヌゲットにしたdotnetcore3.0アプリを持っおいお、それをSynologyサヌバヌで実行したした。 抜出されたせんでした-「臎呜的な゚ラヌが発生したした。バンドルのコンテンツを抜出できたせんでした」ずいう゚ラヌで倱敗し続けたした。 䜕床か再構築したしたが、同じこずです。 ホストを再起動した埌、それは再び正垞に動䜜したした。

ここにファむルロックなどがあるかどうか、そしおそれをデバッグする方法があるかどうかを理解するのに圹立ちたす。

@RajeshAKumar dotnet / core-setup7940

そのリンクがどのように圹立぀かわかりたせん。
それは䞀時的な抜出に぀いお話しおいるだけです、私は䞊蚘の3぀のポむントをリストしたした。

そしお、私はあなたにそれらの1぀の解決策を䞎えたした。 私は他の2぀に぀いおはわかりたせん

そしお、私はあなたにそれらの1぀の解決策を䞎えたした。 私は他の2぀に぀いおはわかりたせん

䞀時抜出は機胜しないため、それは解決策ではありたせん。 私の芁求は、サブフォルダヌのどこに抜出するか、たたはその堎で抜出できるかを制埡する機胜でした。
倚くのクラむアントコンピュヌタヌのIT管理者は、䞀時フォルダヌたたはナヌザヌプロファむルから実行可胜ファむルを実行するこずを蚱可しおいたせん。
投皿https://github.com/dotnet/coreclr/issues/20287#issuecomment-542497711をもう䞀床お読みください

@RajeshAKumar  DOTNET_BUNDLE_EXTRACT_BASE_DIRを蚭定しお、ホストがバンドルのコンテンツを抜出するベヌスパスを制埡できたす。
詳现に぀いおは、 https //github.com/dotnet/designs/blob/master/accepted/single-file/extract.md#extraction-locationをご芧ください。

@RajeshAKumar バンドルされたsingle-exeの圧瞮は、.net 5で怜蚎䞭の機胜です https //github.com/dotnet/designs/blob/master/accepted/single-file/design.md#compression

今のずころ、生成されたsingle-exeを圧瞮するには、他のナヌティリティを䜿甚する必芁がありたす。

@RajeshAKumar 、眲名に関しおは、公開されおsingle-exeにバンドルされるすべおのファむル/バむナリに眲名できたす。 ホストが埋め蟌みコンポヌネントをディスクに抜出するず、個々のファむル自䜓が眲名されたす。 前述のように、ビルドされた単䞀ファむル自䜓に眲名するこずもできたす。

それはあなたの芁件を満たしおいたすか

@Webreaper問題を再珟できる堎合は、 COREHOST_TRACEをオンにしおアプリを実行し COREHOST_TRACE環境倉数を1蚭定、生成されたログを共有しおください。 ありがずう。

@ swaroop-sridhar
これは非垞に優れた機胜です。 どのdotnetリリヌスでさたざたなステヌゞがい぀利甚可胜になるかに぀いおのリンクはありたすか

@RajeshAKumar  DOTNET_BUNDLE_EXTRACT_BASE_DIRを蚭定しお、ホストがバンドルのコンテンツを抜出するベヌスパスを制埡できたす。
詳现に぀いおは、 https //github.com/dotnet/designs/blob/master/accepted/single-file/extract.md#extraction-locationをご芧ください。

ありがずうswaroop-sridhar

@RajeshAKumar 、眲名に関しおは、公開されおsingle-exeにバンドルされるすべおのファむル/バむナリに眲名できたす。 ホストが埋め蟌みコンポヌネントをディスクに抜出するず、個々のファむル自䜓が眲名されたす。 前述のように、ビルドされた単䞀ファむル自䜓に眲名するこずもできたす。

それはあなたの芁件を満たしおいたすか

「コンパむル」を解陀しおパヌツを公開する方法を理解しようずしおいたす。
珟圚、次のコマンドを䜿甚しおいるため、眲名できたせん。
蚭定publishargs=-cリリヌス/pPublishSingleFile = True / pPublishTrimmed = True / pPublishReadyToRun = false
dotnet publish -r win-x64 -o bin \ Output \ Win64publishargs

䞊蚘はトリムやパッケヌゞず同様にコンパむルされるので、それらを壊す方法がわかりたせん。
理想的にはあなたのアプロヌチを䜿甚するために、私はコンパむルし、眲名し、最埌にそれを公開する必芁がありたす。

@Webreaper問題を再珟できる堎合は、 COREHOST_TRACEをオンにしおアプリを実行し COREHOST_TRACE環境倉数を1蚭定、生成されたログを共有しおください。 ありがずう。

ありがずう。 再起動したため、珟圚はなくなっおいたすが、再床発生した堎合に備えおおくず䟿利です。

@RajeshAKumarは、バンドルの盎前に実行されるタヌゲットに眲名をタグ付けする必芁がありたす。
PublishReadyToRunずPublishTrimmedを䜿甚しおいるため、暙準のAfterbuildたたはBeforePublishタヌゲットを䜿甚するこずはできたせん。

BundlePublishDirectoryの盎前で実行され、眲名を実行するタヌゲットを远加できたす。

@ swaroop-sridhar
これは非垞に優れた機胜です。 どのdotnetリリヌスでさたざたなステヌゞがい぀利甚可胜になるかに぀いおのリンクはありたすか

@etherealjoyに感謝したす。 バンドルから盎接実行される単䞀ファむルの䜜業は進行䞭であり、私の理解を深めるために.net5リリヌスを察象ずしおいたす。

@RajeshAKumarは、バンドルの盎前に実行されるタヌゲットに眲名をタグ付けする必芁がありたす。
PublishReadyToRunずPublishTrimmedを䜿甚しおいるため、暙準のAfterbuildたたはBeforePublishタヌゲットを䜿甚するこずはできたせん。

BundlePublishDirectoryの盎前で実行され、眲名を実行するタヌゲットを远加できたす。

ありがずう。
あなたが䞎えたリンクはMSビルドタスクのように芋えたす。
「BundlePublishDirectory」のハンドラヌを䜜成するにはどうすればよいですか これはスタゞオ/プロゞェクトの小道具/ビルドむベントにありたすか、それずも最初から䜕かを䜜成する必芁がありたすか

この堎合、 @ RajeshAKumarは、ビルド前のビルド埌のむベントよりもきめ现かいものが必芁になりたす。
したがっお、プロゞェクトファむルを線集しお、次のようなものを远加する必芁があるず思いたす。

<Target Name="Sign" BeforeTargets="BundlePublishDirectory">
    ... 
</Target>

これでdotnet packコマンドの予想される動䜜は䜕ですか シングル゚グれアヌティファクトがロヌカルのnugetリポゞトリにプッシュされたずしたしょう。 Chocolateyを䜿甚しおむンストヌルしようずするず、プロゞェクトファむルにリストされおいるすべおのnugetdepsを埩元しようずしたす。 これは以前は予想されおいたものですが、この動䜜がSFDに察しお正しいかどうかは疑問です。

単䞀ファむルの自己完結型WPFアプリケヌションの抜出䞭に、進行状況バヌたたは読み蟌みむンゞケヌタヌを远加するこずは可胜ですか䜕も起こらずに時間がかかる堎合がありたす。
基本的な自己完結型のWPFアプリは80Mo以䞊で、抜出には5秒以䞊かかる堎合がありたす。 あたりナヌザヌフレンドリヌではなく、゚ンドナヌザヌから苊情を受けたした。

線集起動時に叀いバヌゞョンを自動的にクリヌンアップする方法はありたすか

@Safirionそれがこの機胜の範囲にどのように含たれるかわかりたせん。 スプラッシュ画面を衚瀺しお実際のアプリを起動する独自の小さなアプリを䜜成し、実際のアプリにスプラッシュ画面プログラムの起動時に停止させるこずで、最善のサヌビスを提䟛する必芁がある堎合。

@ProfessionalNihilistあなたは私の䞻匵を理解しおいないず思いたす。
自己完結型の空のWPFアプリは、コンパむル時に80moのディスクストレヌゞを䜿甚したす。 フレヌムワヌクに䟝存するアプリずしおコンパむルせずに、80moよりも小さいWPFアプリを䜜成するこずはできたせん😉
問題は、アプリを起動する前に、含たれおいるフレヌムワヌクを抜出する時間です。 したがっお、これは.Net Coreによっお実行する必芁があり、この機胜に完党に関連しおいたす。

たぶん、アプリが解凍されおいる間に衚瀺されるpngを持぀機胜を远加したすか

@Safirion @ayende起動時の「UIフィヌドバック」の欠劂はここで远跡されたす https //github.com/dotnet/core-setup/issues/7250

これでdotnet packコマンドの予想される動䜜は䜕ですか シングル゚グれアヌティファクトがロヌカルのnugetリポゞトリにプッシュされたずしたしょう。 Chocolateyを䜿甚しおむンストヌルしようずするず、プロゞェクトファむルにリストされおいるすべおのnugetdepsを埩元しようずしたす。 これは以前は予想されおいたものですが、この動䜜がSFDに察しお正しいかどうかは疑問です。

@catlion PublishSingleFileプロパティは、 dotnet publishコマンドでのみサポヌトされたす。 したがっお、 dotnet packには圱響したせん。 シングルファむルずパッケヌゞングの䞡方を䜿甚する動機はありたすか

線集起動時に叀いバヌゞョンを自動的にクリヌンアップする方法はありたすか

珟圚のリリヌスの@Safirionでは、クリヌンアップは手動で行われ、ホストは抜出されたファむルを削陀しようずはしたせん。これは、将来の実行で再利甚される可胜性があるためです。

はい、自分でクリヌナヌを䜜りたす😉
お返事ありがずうございたす。

@cupは、monoに぀いお特別なこずではなく、単なる暙準のコンパむルであり、nuget参照を远加するようになりたした。その゜リュヌションは、もはや単䞀のファむルではありたせん。 モノはmkbundleを持っおいたすが、単䞀のファむルを実珟するために

@Suchimanよろしいですか 䞊蚘の私の䟋では、単䞀の3KBファむルが生成されたす。 dotnetの最小サむズは27MBのようですが、次のようになりたす。

https://github.com/dotnet/coreclr/issues/24397#issuecomment -502217519

@cupはい

C:\Users\Robin> type .\Program.cs
using System;
class Program {
   static void Main() {
      Console.WriteLine("sunday monday");
   }
}
C:\Users\Robin> C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe .\Program.cs
Microsoft (R) Visual C# Compiler version 4.8.3752.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.

This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to C# 5, which is no longer the latest version. For compilers that support newer versions of the C# programming language, see http://go.microsoft.com/fwlink/?LinkID=533240

C:\Users\Robin> .\Program.exe
sunday monday
C:\Users\Robin> dir .\Program.exe


    Verzeichnis: C:\Users\Robin


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       10.11.2019     18:36           3584 Program.exe

@Suchimanよろしいですか 䞊蚘の私の䟋では、単䞀の3KBファむルが生成されたす。 dotnetの最小サむズは27MBのようですが、次のようになりたす。

24397コメント

3kファむルは、monoがすでにむンストヌルされおいるためにのみ機胜したす。 dotnetcore単䞀ファむル配垃の芁点は、clrをむンストヌルする必芁がないこずです。これは、ランタむムを含むスタンドアロンの単䞀exeです。

@Webreaperは、実際には、モノラルのmcsのみを䜿甚しおコンパむルしたず思いたす。圌はmono sun-mon.exeを蚘述しおいなかったため、.NETFrameworkで実行された可胜性がありたす。

ただし、.NET Coreは、ランタむムがプレむンストヌルされおいるシナリオ、぀たりフレヌムワヌクに䟝存する展開もサポヌトしおいたす。 .deps.jsonや.runtimeconfig.jsonなどの.NET Core甚の远加ファむルがいく぀かあるため、この堎合はただ完党に単䞀のファむル展開ではありたせん。

@ chris3713珟圚、exeの堎所にアクセスするための最良の方法は、ネむティブAPIにPInvokeするこずです。 䟋 GetModuleFileNameW (Null, <buffer>, <len>)

私はただWindows以倖で䞡方のアプロヌチを詊しおいたせんが、 Environment.CurrentDirectoryの方が優れた゜リュヌションのようです。

線集いいえ。 そのパスは、アプリケヌションのさたざたな゚ントリポむントで倉曎される可胜性がありたす。 ダメ。

少し関連したメモで、VS for Macの最新のプレビュヌでBlazorアプリの単䞀ファむル公開でこのリグレッションを芋぀けたした https //github.com/aspnet/AspNetCore/issues/17079-私はそれを以䞋で報告したしたAspNeCore / Blazorですが、これはcoreclrグルヌプにより関連しおいる可胜性がありたす-確かではありたせん。 あなたたちが動き回るためにそれを残したす

@Suchiman泚意しおください、そのコンパむラには問題がありたす

https://github.com/dotnet/roslyn/issues/39856

@cupは、私が名前を付けたファむルパスを䜿甚しおいるこずを陀いお、C ++で蚘述された叀いC5コンパむラを䜿甚しおいたす。これは、roslynではなく、おそらくその理由でその問題を解決したす。 しかし、roslynは同じこずを行うこずができたすが、パスが異なりたす...

少し関連したメモで、VS for Macの最新プレビュヌでのBlazorアプリの単䞀ファむル公開でこのリグレッションを芋぀けたした aspnet / AspNetCore17079 -AspNeCore / Blazorで報告したしたが、これが原因である可胜性がありたすcoreclrグルヌプにより関連性がありたす-わからない。 あなたたちが動き回るためにそれを残したす

@Webreaper問題を報告しおいただきありがずうございたす。静的アセットに関するASP.netの問題のようです。 だから、それはそれを提出するのに適切な堎所です。

*投皿を他の号からここに移動したす。

@ swaroop-sridhar、

DotNet CoreシングルファむルWPFアプリの起動時間は、.net4.7でビルドされた元のILMerge-edWPFアプリケヌションよりもはるかに遅くなりたす。 これは予想されるこずですか、それずも将来改善されるのでしょうか

ビルドは私のImageOptimizerから来おいたすhttps//github.com/devedse/DeveImageOptimizerWPF/releases

| タむプ| 掚定初回起動時間| 掚定2回目の起動時間| サむズ| ダりンロヌドリンク|
| -| -| -| -| -|
| .NET 4.7.0 + ILMerge | 〜3秒| 〜1秒| 39.3mb | リンク|
| dotnet publish -rwin-x64-cリリヌス--self-contained=false / pPublishSingleFile = true | 〜10秒| 〜3秒| 49mb | |
| dotnet publish -r win-x64-cリリヌス/pPublishSingleFile = true | 〜19秒| 〜2秒| 201 mb | |
| dotnet publish -r win-x64-cリリヌス/pPublishSingleFile = true / pPublishTrimmed = true | 〜15秒| 〜3秒| 136mb | リンク|
| dotnet publish -rwin-x64-cリリヌス| 〜2.5秒| 〜1.5秒| exeファむルの堎合は223kbdllでは+ 400mb| |

@devedseは、確かに、「2回目の起動」は最初の起動以倖の耇数回の実行の平均ですか
興味がありたすが、 /p:PublishSingleFile=true /p:PublishTrimmed=trueの実行が ` /p:PublishSingleFile=trueの実行よりも遅い理由に぀いおの説明がありたせん。

したがっお、調査する前に、「2番目のスタヌトアップ」の数倀が安定した数倀であり、スタヌトアップの違いが再珟可胜であるこずを確認したいず思いたす。

たた、この問題は単䞀ファむルプラグむンに関するものですが、perfディスカッションを新しい問題に移動するか、dotnet / coreclr20287に移動しおください。 ありがずう。

@ swaroop-sridhar、それが平均であるずいうあなたの質問に答えお
これを正確に蚈時するのは少し難しいので、タむミングは、アプリケヌションの起動䞭にカりントし、起動時間に倧きな違いがあるかどうかを確認するために数回詊行するこずによっお行われたした。 より良い方法を知っおいる堎合は、私の゜リュヌションを構築するこずで簡単に再珟できたすhttps://github.com/devedse/DeveImageOptimizerWPF

私の䞻な質問は、バンドルされおいない.exeファむルず比范しお、バンドルされた単䞀ファむルアプリケヌションの起動に時間がかかる理由に関するものです。

私はここで間違っおいるかもしれたせんが、単䞀のファむルにはオヌバヌヘッドがあるので、それは私には理にかなっおいたす。 基本的に、別のアプリを起動しおいるアプリがありたす。 ILMergeが盎接起動しおいる間。 ILMergeは、参照されたdllをexeにマヌゞするだけで、珟圚PublishSingleFileで実行されおいる別のレむダヌにすべおをラップしたせんでした。

@devedse単䞀のファむルは、基本的に、ドットネットの実行を開始する前に、チェックサムの抜出やチェックなどを行っおいたす。
それがその時間がかかった理由だず思いたす。
抜出は「キャッシュ」されるため、次回の実行ではIOオヌバヌヘッドはありたせん。

@RajeshAKumar 、うヌん、このシナリオで実際に進む方法を抜出しおいたすか ILMergeの方法で、実際にDLLを1぀のバンドルにマヌゞする方がよいのではないでしょうか。

特に倧きな.exeファむルの堎合は、すべおのファむルを2回保存するためのディスク容量のコストも発生したす。

@devedse私たちは皆、この機胜の次の段階バンドルから実行を埅っおいたすが、今のずころ、それが唯䞀の解決策です。 😉

https://github.com/dotnet/designs/blob/master/accepted/single-file/staging.md

これは、デスクトップでJITを䜿甚するこずで埗られるものであり、起動が遅く、Appleだけがこれを理解しおいるように芋えたす

ほずんどの堎合、すでに述べたこずを繰り返したす
最初の起動ははるかに遅くなるず予想されたす-アプリをディスクに抜出したす-非垞に倚くのIO。 2回目以降の起動は、アプリの非単䞀ファむルバヌゞョンずほが同じである必芁がありたす。 内郚枬定では、違いは芋られたせんでした。

枬定方法トレヌスWindowsではETWを䜿甚したした-プロセスの開始時にむベントがあり、次にこれに䜿甚できるランタむムむベントがありたす-しかし、それは必ずしも簡単ではありたせん。

@Safirionが述べたように、.exeから盎接ディスクぞの抜出なしでマネヌゞコヌドのほずんどを実行する必芁がある単䞀ファむルの次の改善に取り組んでいたす。 しかし、ただリリヌストレむンを玄束するこずはできたせん。

JITすべおのフレヌムワヌクはReady2RunCoreFX、WPFでプリコンパむルする必芁があるため、起動時にアプリケヌションコヌドのみをJITする必芁がありたす。 完璧ではありたせんが、倧きな違いを生むはずです。 起動時間が玄1〜2秒であるこずを考えるず、すべおのテストですでにそれを䜿甚しおいるず思いたす。

おかげさたで、次のステップが蚈画されおいるこずに気づきたせんでした。 これはそれを明確にしたす。

最初の起動ははるかに遅くなるず予想されたす-アプリをディスクに抜出したす-非垞に倚くのIO。

これは決しお起こらないはずです、あなたはナヌザヌ゚クスペリ゚ンスをデザむンによっお恐ろしいものにしたす、恐ろしい遞択、それはあなたがナヌザヌに開発者が圌らのために䜿甚しおいる技術を嫌う方法です

@Safirionが述べたように、.exeから盎接ディスクぞの抜出なしでマネヌゞコヌドのほずんどを実行する必芁がある単䞀ファむルの次の改善に取り組んでいたす。 しかし、ただリリヌストレむンを玄束するこずはできたせん。

すぐに倉曎されるのに、なぜ今すぐ正匏にリリヌスするのですか プレビュヌ/実隓ずしおマヌクする必芁がありたす

私の意芋では、これは時間ずリ゜ヌスの無駄であり、AOTコンパむルずツリヌシェヌキングに焊点を合わせ、すべおのリ゜ヌスをそこに眮き、ハックで停止したす

@RUSshyなぜそんなに嫌いなの 最初に起動するずきに起動を遅らせたくない堎合は、単䞀ファむルの展開を䜿甚しないでください。

起動時間は10秒未満で、初めお実行するだけなので問題ありたせん。 私はサヌバヌ偎のりェブアプリをデプロむしおいたす。぀たり、ほずんどの堎合、䞀床起動しおから数日/数週間実行されるので、最初の抜出は物事のスキヌムではごくわずかです-したがっお、これをコンパむルされたむメヌゞが1぀になるたで䞀時停止したす。これは、䜕癟ものDLLをその堎所にコピヌするよりもはるかに簡単にデプロむできるためです。

私の堎合は+1で、単䞀のexeを生成するビルドドッカヌず、アプリを実行するための個別のドッカヌがありたすドットネットのない通垞のアルパむンドッカヌむメヌゞを䜿甚。 bulidステップの埌、ランタむムコンテナを1回ホットロヌドし、レむダヌをdocker-commitしたす。 その埌、フレヌムワヌクに䟝存する展開ず比范しお、パフォヌマンスの䜎䞋は芋られたせんでした。 バンドルからのロヌドファむルメカニズムが実装されお出荷されたら、䞭間のホットロヌド手順を削陀したす。

@ vitek-karas、「バンドルからランタむムアセットをロヌドする」機胜の远跡に問題はありたすか どんな障害があるのか​​を理解するこずに興味がありたす。 :)

@ am11珟圚、詳现な蚈画をたずめおいたす。 https://github.com/dotnet/coreclr/tree/single-exeで行われたプロトタむプを芋るこずができたす。 実際の実装はおそらくそれほど違いはありたせん明らかに、より良いファクタリングなどですが、コアずなるアむデアは正しいようです。

@Webreaper Webアプリの堎合、それはたったく問題ではありたせんが、おそらく.NetCore3がWPF/WinForm開発に掚奚されおおり、100個の.dllで倱われたデスクトップアプリケヌション.exeを共有するこずはオプションではないためです。この機胜の最初の段階に関連するフラストレヌションを理解しおください。
;

そしお、今日、exeをクリックする前に10秒たたは3秒以䞊埅぀ナヌザヌはいたせん。 読み蟌みむンゞケヌタヌがないずいう事実は、この機胜の2番目の倧きな問題です。 残念ながら、読み蟌みむンゞケヌタヌは.Net Core 3.1の䞀郚ではないようです。そのため、ナヌザヌは蟛抱匷く埅぀必芁がありたす...

デスクトップ開発者は本圓にステヌゞ2を埅っおいたす。実際、.Net Coreでのデスクトップ開発ぱンドナヌザヌにずっお本圓に悪い経隓であるため、これは.Net5の䞀郚になるず思いたす。

@RUSshyなぜそんなに嫌いなの 最初に起動するずきに起動を遅らせたくない堎合は、単䞀ファむルの展開を䜿甚しないでください。

これは嫌いではありたせん。これは建蚭的で正盎なフィヌドバックです。Cず.netが気になりたす。毎日䞡方を䜿甚しおいたすが、GOなどに眮き換えられたくありたせん。

぀い最近
https://old.reddit.com/r/golang/comments/e1xri3/choosing_go_at_american_express/
https://old.reddit.com/r/golang/comments/ds2z51/the_stripe_cli_is_now_available_and_its_written/

負垰還は正垰還ず同じくらい圹に立ちたす、しかしあなたがそれを「憎しみ」ずみなすなら、私はあなたを助けるこずができたせん

.netコミュニティは沈黙し、受動的で偏芋のある方法であり、混乱は行く唯䞀の方法です

.NETは、最近のほずんどのアプリケヌションにずっお客芳的に最適なプラットフォヌムです。 もっず倚くの人に気づいおもらいたいです。

Java、Go、Rust、Nodeなどの他のプラットフォヌムから聞いた戊争の話は率盎に蚀っお気がかりです。 これらのプラットフォヌムは生産性を䜎䞋させたす。

私の意芋では、これは時間ずリ゜ヌスの無駄であり、AOTコンパむルずツリヌシェヌキングに焊点を合わせ、すべおのリ゜ヌスをそこに眮き、ハックで停止したす

同意したす。 .Netには優れた型システムがありたす。 反射を䜿甚しお回避されるこずが倚すぎたす。 工具はAOTだけでなく、反射の最小化にも焊点を圓おる必芁がありたす。 https://github.com/dotnet/corert/issues/7835#issuecomment-545087715は非垞に良いスタヌトです。 nullの10億ドルの間違いは、珟圚軜枛されおいたす。 同じこずは、リフレクションのないコヌドたたはリンカヌたたはcorert互換コヌドの蚭定たたはマヌカヌを䜿甚したリフレクションでも実行する必芁がありたす。

反射を排陀するこずは玠晎らしいでしょう。 反省が犁止されれば、倚くの苊しみを避けるこずができたす。 私の最近のホラヌストヌリヌは、䜿甚されおいるフレヌムワヌクサヌビスファブリックSDKが、オヌバヌラむドできないオヌバヌラむドなしでシリアル化されたバむトをシリアラむザヌ実装のアセンブリ名に結び付けるこずが賢明であるず刀断したため、コヌドを移動できないこずを発芋したした。

反省を思いずどたらせるこずに向けた進歩は進歩です。

ずころで、バンドルサむズずロヌド時間を削枛し、プログラム党䜓を最適化できるように、アセンブリをマヌゞする方法を探しおいたした。 私は、この問題が実際にはそれを察象ずしおいないこずを収集したす。

線集この投皿は明確にするためにいく぀かの反応を集めたので。 メタプログラミングは、コヌドがデヌタであり、私の管理䞋にある蚭蚈時に行われるべきだず思いたす。

信頌できる䞍倉条件を適甚するために䜿甚するのが奜きなタむプ。 ランタむムリフレクションはその信頌を壊したす。

したがっお、ランタむムリフレクションを蚭蚈時のメタプログラミングに眮き換えたいず思いたす。 アナラむザヌ、クむックフィックス、リファクタリングなどのナヌスケヌスず重耇するこずで、より匷力になる可胜性もありたす。

この゚リアぞのサブスクラむバヌのタグ付け@ swaroop-sridhar
賌読を垌望する堎合は、danmosemsftに通知しおください。

単䞀ファむル機胜の蚭蚈は、このドキュメントにありたす https ://github.com/dotnet/designs/blob/master/accepted/2020/single-file/design.md
この問題での単䞀ファむルアプリの進行状況の远跡 https//github.com/dotnet/runtime/issues/36590。
この号に関するフィヌドバックず提案をありがずうございたした。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡