2

うまくビルドおよびデプロイできる 2 つのモジュールがあります。しかし、どちらも別の「共有」プロジェクトにプルしたいコードを共有しています。モジュールには共有プロジェクトへの参照があり、すべてが機能しているようです。

しかし、docker イメージをビルドしたい場合、次のトレースが表示されます。

PROCESSING DOCKER FILE: ./Dockerfile
    PUBLISHING MODULE: modules/Valid.PrivacyCrawler.Crawlers
    Microsoft (R) Build Engine version 15.5.179.9764 for .NET Core
    Copyright (C) Microsoft Corporation. All rights reserved.
    BUILDING DOCKER IMAGE: privacycrawler.azurecr.io/valid.privacycrawler.crawlers:0.0.12-amd64
    Traceback (most recent call last):
      File "/usr/local/bin/iotedgedev", line 11, in <module>
        sys.exit(main())
      File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 722, in __call__
        return self.main(*args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 697, in main
        rv = self.invoke(ctx)
      File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 1066, in invoke
        return _process_result(sub_ctx.command.invoke(sub_ctx))
      File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 895, in invoke
        return ctx.invoke(self.callback, **ctx.params)
      File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 535, in invoke
        return callback(*args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/click/decorators.py", line 17, in new_func
        return f(get_current_context(), *args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/iotedgedev/cli.py", line 132, in push
        ctx.invoke(modules, push=push, deploy=deploy, no_build=no_build)
      File "/usr/local/lib/python2.7/dist-packages/click/core.py", line 535, in invoke
        return callback(*args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/iotedgedev/cli.py", line 454, in modules
        mod.push(no_build=no_build)
      File "/usr/local/lib/python2.7/dist-packages/iotedgedev/modules.py", line 22, in push
        self.build_push(no_build=no_build)
      File "/usr/local/lib/python2.7/dist-packages/iotedgedev/modules.py", line 77, in build_push
        build_result = self.dock.docker_client.images.build(tag=image_destination_name, path=".", dockerfile=docker_file_name, buildargs={"EXE_DIR": mod_proc.exe_dir})
      File "/usr/local/lib/python2.7/dist-packages/docker/models/images.py", line 183, in build
        raise BuildError(chunk['error'], result_stream)
    docker.errors.BuildError: The command '/bin/sh -c dotnet publish -c Release -o out' returned a non-zero code: 1

コードを複製して共有プロジェクトを使用しないと、問題なくモジュールがビルドされます。

モジュールと同じように .NET コアである共有プロジェクトはサポートされていませんか?

NuGet パッケージ (Newtonsoft.JSON など) を問題なく使用できます。

4

3 に答える 3

0

実際には共有プロジェクトを使用することができますが、注意が必要なのは、Dockerfile を変更してすべての参照プロジェクトを含めることです。これは手動で行う必要があります。Dockerfile に次のような行を追加する必要があります。

COPY ReferencedProjectFolder/ReferencedProject.csproj ReferencedProjectFolder/

ただし、ビルド中のモジュールのフォルダーに限定されたコンテキストを渡すため、VS ビルドを使用することはできません。独自のdocker buildコマンドを記述し、Powershell を介してモジュールをビルドする必要があります。コマンドは、VS ビルドの出力からコピーできます。buildただし、親ディレクトリを使用するには、コマンドのコンテキスト パラメータも変更する必要があります。例:

cd <module_folder>
docker build --rm -f $dockerfileName -t $imageNameTagged $buildContext

$buildContext、モジュールとそのすべての参照プロジェクトがサブフォルダーである親ディレクトリへのパスである必要があります。そうCOPYしないと、参照プロジェクト フォルダーが「認識」されないため、上記のコマンドは失敗します。

このようにして、すべての基本レイヤー (データ、ビジネス、共通など) を実装しました。さらに、継承メカニズムを実装することができました。たとえば、基本クラスは別のモジュールとして追加されますが、IoT Edge デプロイ json では実際には定義されません。

これが少し役立つことを願っています。

于 2019-01-29T09:27:45.030 に答える