問題タブ [packagereference]
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.
c# - update-package の実行時に PackageReference のアップグレード バージョンを制限する
packages.config
NuGet 用の .NET の古いシステムでは、Package 要素の属性を使用して、パッケージの更新時に考慮されるパッケージの可能なバージョンを制限できました。allowedVersions
update-package
上記を含むプロジェクトの Visual Studio 内で を実行すると、属性を使用して 10.0.3 に固定しているため、更新は行われませんNewtonsoft.Json
。allowedVersions
でこれを達成するにはどうすればよいPackageReference
ですか? Version 属性にsemver構文を適用すると、復元されたバージョンにのみ影響します。更新は制限されません。したがって、以下を指定してPackageReference
実行するupdate-package
と、たとえば、11.0.1 が NuGet リポジトリにある場合、11.0.1 にアップグレードされます。
バックグラウンド
パッケージの更新にはコマンド ライン ツールを使用しています。これは、高速で移動する内部パッケージ (1 日に複数回更新) と、より安定した移動の少ないパッケージ (例: ASP.NET) の両方があるためです。大規模なコードベースでは、ファイル内の各依存関係を手作業で更新すること.csproj
は、単純にスケーラブルではありません (そしてエラーが発生しやすくなります)。その下packages.config
で、アップグレードしたくないサードパーティのパッケージを「固定」し、最新の急速に変化する依存関係に更新することもできます。
.net - PackageReference を使用して NuGet パッケージのサブフォルダーから DLL を参照する
プロジェクトを packages.config から PackageReference 構造にアップグレードしています。参照されているパッケージの 1 つには、次のようなサブフォルダーに DLL があります。
- lib\net45\some.dll
- lib\net45\xxx\other.dll
packages.config を使用してプロジェクトからこのパッケージを参照すると、パッケージのすべての DLL が参照としてプロジェクトに含まれ、正常に動作します。PackageReference を使用すると、ルート フォルダー (lib\net45) 内の DLL のみが認識されるようです。サブフォルダー内の DLL の機能を使用すると、すべてのビルド エラーが発生します。PackageReference を使用するときに NuGet パッケージのサブフォルダーを考慮するように NuGet に指示する方法はありますか?
c# - Azure Cloud Services での PackageReference での ValueTuple の使用
C# プロジェクトを古いスタイルから新しい csproj スタイルに変換しようとしていますSystem.ValueTuple.dll
が、実装アセンブリではなく ReferenceAssembly がコピーされるため、実行時に Azure クラウド サービスが機能しなくなります。
これは、このクローズド/放棄された問題で説明されている問題と同じです。
私のプロジェクトは現在 .NET 4.6.2 をターゲットにしているため、.NET 4.7 以降をターゲットにすることで問題は「解決可能」System.ValueTuple
です。これは、NuGet パッケージとして参照する必要がないためです。
可能であれば、次のようにこの状況を回避したいと思います。
- これには、worker ロールに .net 4.6.2 がインストールされているため、.net 4.7+ ランタイムをインストールするための追加のデプロイ手順が必要です。https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-guestos-update-matrix#family-5-releases
- これは「簡単な方法」のように思えます。別の方法で問題を解決できるかどうかを知りたいです。
問題の追加説明:
私は使用します:
refDLL
対象:packages\system.valuetuple\4.5.0\ref\net461\System.ValueTuple.dll
、およびlibDLL
のためにpackages\system.valuetuple\4.5.0\lib\net461\System.ValueTuple.dll
。
それらは、refDLL
40 kb とlibDLL
78 kb のように、簡単に区別できます。
実際のコードと完全なビルド ログ ファイルは、https ://www.dropbox.com/s/kquv5voa19jfonz/AzureCloudService1.zip?dl=0 にあります。
次のようなソリューション構造があります。
- AzureCloudService1
- WorkerRole1 (旧 csproj)
- WorkerRole2 (新しい csproj)
クラウドサービスを構築したら、
WorkerRole1\bin\Debug
持っていlibDLL
ます。WorkerRole2\bin\Debug\net461
もっているlibDLL
AzureCloudService1\obj\Debug\WorkerRole1
もっているlibDLL
AzureCloudService1\obj\Debug\WorkerRole2
もっているrefDLL
ログから、WorkerRole1 と WorkerRole2 の次の違いに気付きました。
WorkerRole1:
WorkerRole2:
さまざまなマイクロソフトの問題トラッカーで他の関連する問題を検索した後、関連していると思われるこの問題を見つけました: https://github.com/dotnet/sdk/issues/1738。