1

現在ロードされているソリューションに含まれているnuspecからnugetパッケージを公開および更新するプロセスを簡素化する、内部使用のためのVS2012拡張機能を作成しました。

これを行うために、公式パッケージソースからNuget.Coreを参照し、公式nuget拡張機能に拡張レベルの依存関係を追加してから、VSIXに含まれないようにNuget.Coreアセンブリへのローカル参照をマークしました。

これは、nugetが更新された昨日まではすべて問題ありませんでした。このコアアセンブリの古いバージョンを読み込めないため、拡張機能はまったく機能しません(バージョン番号は常に変更されます)。

nugetから新しいバージョンを取得しようとしましたが、まだリリースされていません。

だから私はいくつかのオプションに直面しています:

  • 新しいバージョンへのバインディングリダイレクトを使用して、拡張機能を再度リリースします
  • nuget拡張機能のインストール場所からDLLを参照します

しかし、nugetも更新されるたびにパッケージを再構築してリリースし続ける必要がないため、これらはどちらも理想的ではないようです。同様に、メインのnuget拡張機能が機能しなくなる可能性があるため、拡張機能を使用してアセンブリのコピーを展開したくありません。

誰かが私のために他のオプションを手に入れましたか?

4

3 に答える 3

0

拡張機能は実際にはNugetに依存しているため、拡張機能の新しいバージョンを毎回リリースするのが最善の選択だと思います。

VSの拡張性自体に関しては、私が知る限り、ServiceProviderを使用して拡張機能間で通信する方法があります。サービスを共有することも、共有することもできます。したがって、Nugetがサービスを提供している場合は、それらを介して使用を試みることができます。

階層化ポイントとして、 ServiceProviderクラスのドキュメントを確認してください。

于 2013-02-22T10:33:36.240 に答える
0

ソフトウェアを開発した依存関係の正確なバージョンとともにソフトウェアを配布する必要があります。ユーザーがそれらを持っていることを期待することはできません。

アファイク、これは当たり前のことです。なぜそれは何かを壊すのでしょうか?それを試してみてください。

于 2013-02-22T10:38:05.650 に答える
0

この質問をLuanNguyenにツイートしました。LuanNguyenはNuget製品全体で働いています。

そこの応答チェーンからわかるように、解決策はNuget.Coreを直接参照しないことです。これは、サポートされていないためです。Nugetの操作の一部を実行するためにNugetが提供するサービスプロバイダーがありますが、私が探していたものはありません。

それで、私は彼の提案に従うことになりました-コードプレックスからNugetソースを取得し、アセンブリのローカルコピーを構築します(ナゲット拡張に干渉しないように異なるIDで)。

その後、新しいパッケージ機能がNugetに追加された場合はこれを更新し続ける必要がありますが、拡張機能が更新されても機能し続けます。

もう1つのオプションは、ローカルのNuget.Coreを拡張機能にILMergeすることでした。ただし、これはWPFアセンブリであり、マージすることはできません。標準の衛星アセンブリを作成して、Nuget.Coreをマージすることもできたと思います。

于 2013-02-22T11:29:19.973 に答える