問題タブ [dotnet-sdk]

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.

0 投票する
2 に答える
420 参照

json.net - dotnet publish 出力フォルダーからアプリを実行しているときに、ファイルまたはアセンブリ Newtonsoft.Json を読み込めませんでした

Newtonsoft.Jsonライブラリがスローする問題を見つけています

アプリを Docker コンテナーとして実行しているときに、なぜこれが発生するのか、依存関係の管理がスムーズに機能しないのかを知りたいです。

私は.NET 5を使用しています

json のシリアライズとデシリアライズにMyLibrary.A明示的に使用するライブラリがあります。Newtonsoft.Json 13.0.1

MyLibrary.Bライブラリをラップする別のライブラリがありMassTransit.AmazonSQSます。この MassTransit ライブラリも Newtonsoft.Json を使用していますが、おそらく別のバージョンです。明示的に何もしなければ、MassTransit の依存関係がNewtonsoft.Json 11.0.2. MyLibrary.B明示的に使用していなくても、明示的に追加した場合Newtonsoft.Json 13.0.1、MassTransit はこの最新のものを使用して満足しているようです。Newtonsoft.Json 13.0.1

これで、とMyAppを使用する Web アプリができました。ローカルでは問題なく動作しますが、CI/CD サーバーを使用して Docker イメージを生成します。MyLibrary.AMyLibrary.B

ここで、この Docker イメージをコンテナーとして (Docker Compose として) ローカルで起動すると、エラーが発生します。

存在すらしないバージョンについて文句を言います。13.0.0.0 はありません。このライブラリは 12.0.3 から 13.0.1 になるようです。

現在、すべてのライブラリを調べて、それらがすべてNewtonsoft.Json 13.0.1明示的に使用されていることを確認しています。そして、それらの一部が依存するサードパーティを使用していることを検出した場合Newtonsoft.Json、まったく同じバージョンを明示的に追加して、どこでも13.0.1バージョンを取得できるようにします。


更新 1: 私の回避策はうまくいきませんでした。他に何を試すべきかわかりません。

明示的に webapp に追加したNewtonsoft.Json 13.0.1ので、少なくとも実行時にそれが利用できることを望んでいました。

また、Web を標準の kestrel AspNetCore アプリ (.NET 5) としてローカルで実行すると、適切に起動します。何が起こっている?Newtonsoft.Json 13.0.0.0docker コンテナーが見つからないという不平を言っているのはなぜですか?

これらは、Docker コンテナーとして実行しようとしたときのトレースです。


更新 2 : ライブラリのどこでも MassTransit の依存関係を一致させることにしましたNewtonsoft.Json 11.0.2問題は残ります。 エラーは現在

理解できません。私の依存関係はすべてNewtonsoft.Json11.0.2でも不平を言っています。このバージョンを Web アプリのメイン アセンブリに明示的に (直接は必要ありませんが) 追加し、それでも問題が発生するかどうかを確認します。


更新 3Newtonsoft.Json 11.0.2 :すべてのライブラリに追加した後も、同じ依存関係を Web アプリ アセンブリに依存関係として追加した後も、同じ問題が発生します。

クリスのコメントによると、私は今持ってい.dockerignoreます。

私がイメージを構築する方法は、GitLab を使用して、標準のdotnet build.dotnet publish

より具体的には、私は Kaniko を使用しており、これが私の.gitlab-ci.yml

dotnet publishdocker で何かが台無しになっているかどうか、または私のプロセスに何らかの欠陥があるかどうかはわかりません(他のすべてのサービスでは問題なく動作します)。何が問題なのですか?

とともにNewtonsoft.Json.dll生成されたファイルと、Docker イメージに適切にコピーされていると思われる他のすべてのファイルを見ることができます。dotnet publishMassTransit.AmazonSqsTransport

また、 を開くと、are.deps.jsonへのすべての参照が表示されるため、バージョンの競合はもうありません (と思います!)。Newtonsoft.Json11.0.2

私はアイデアがありません。


更新 4 すべてのローカル nuget パッケージをクリアしました (Ubuntu を使用)

興味深いのは、プロジェクトでその後依存関係を復元すると、

/home/diegosasw/.nuget/packages/newtonsoft.json バージョン11.0.2と_9.0.1

そのため、サブ依存関係が Newtonsoft 9.0.1 を使用している可能性があると思いますが、私が生成Newtonsoft.Json 9.0.1したものに a の痕跡がなくても、これが私の問題に関連しているかどうか疑問に思っています。ロードされ、無視されていますか?*.deps.jsondotnet publish11


更新 5Newtonsoft.Json 9.0.1がいくつかのテスト プロジェクトで使用されていることを確認しcoverlet.collector.deps.jsonまし たcoverlet.core 1.0.0Microsoft.Extensions.DependencyModel 2.1.0

それは私の問題の原因ではないと思います。

またdocker export $(docker ps -lq) -o foo.tar、コンテナにNewtonsoft.Json.dll.

なぜこれが起こっているのかを理解し、この種のことをより適切にトラブルシューティングする方法を学びたい.


更新 6 (10 月 4 日)

問題は Docker にあるとは思いません。問題は、dotnet publish私が見逃しているか間違っている可能性が高いと思います。

何も問題がなかったので、Docker を外に置いておきました。私は単にやろうとしました

その発行フォルダーでアプリを実行してdotnet MyCompany.ItgService.dll、例外を再現します。

しかし、公開する前に、アプリケーションを

私はその例外を取得しません。

詳細、トレース、ツリー構造などについては、https://github.com/dotnet/sdk/issues/21716を参照してください。

概要

質問は次のとおりです。

  • dotnet publishアプリの実行に必要なものがすべて生成されないように見えるのはなぜですか?

  • そこにあるアセンブリについて実行時に不平を言うのはなぜですか?


最終更新: 問題は解決しました。この種の問題を適切にトラブルシューティングする方法と、テスト プロジェクト (異なるバージョンのライブラリを使用する) がアーティファクトを公開せず、目的の依存関係アセンブリを上書きしないようにすることで問題を解決した方法に関する情報が記載されている、私自身の応答を参照してください。

0 投票する
0 に答える
210 参照

docker - Dockerfile dotnet/sdk/5.0 エラー - container_linux.go:380: コンテナー プロセスの開始が原因でした: exec: "cmd": $PATH に実行ファイルが見つかりません

dotnet/sdk/5 を使用した DockerFile は $PATH に cmd 実行可能ファイルがないと言いますが、 /dotnet/framework/sdk:4.8 を使用すると正常に動作します

Dockerfile には .net Framework 4.8 (mcr.microsoft.com/dotnet/framework/sdk:4.8) が含まれており、VS ビルド ツールもインストールされます。

これはうまくいきます。

現在の要件は、4.8 dotnet/sdk:5.0 の代わりに .net 5.0 SDK を使用するようにアップグレードすることです。

DockerFile は以下のとおりです。

私が得ているエラーは

私の Docker デスクトップは WSL2 を使用し、インストールされている Linux ディストリビューションは Ubuntu 20.04 LTS です