无法共享项目
Unable to have a shared project
我有两个模块可以很好地构建和部署。但他们都有共享代码,我想将其提取到单独的 "Shared" 项目中。这些模块引用了共享项目,一切似乎都正常。
但是当我想要构建 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)。
是的,据我所知,它不支持边缘模块的共享项目。但是你可以创建一个库项目,构建项目,然后添加 dll 作为对模块的引用 project.It 可以解决。您可以 post 对此要求进行反馈 here。
还在 IoTEdgeDev GitHub 上将此作为问题发布。似乎随着 IoT Edge 的完整发布,有些东西坏了,他们将通过 IoT Edge Dev 的完整发布修复共享项目错误。
@Michael Xu,我已经试过了,我得到了同样的异常。还尝试从我的项目中制作一个 NuGet 包并以这种方式添加它,但没有成功。
我们实际上设法使用共享项目,但棘手的是修改您的 Dockerfile 以包含所有引用的项目。
这必须手动完成。
您必须在 Dockerfile 中添加类似于这一行的行:
COPY ReferencedProjectFolder/ReferencedProject.csproj ReferencedProjectFolder/
但是,您不能使用 VS Build,因为它传递的上下文仅限于正在构建的模块的文件夹。您必须编写自己的 docker build
命令并通过 Powershell 构建模块。该命令可以从 VS Build 输出中复制。但是 build
命令的上下文参数也应该更改为使用父目录。一个例子:
cd <module_folder>
docker build --rm -f $dockerfileName -t $imageNameTagged $buildContext
$buildContext
应该是模块及其所有引用项目都是子文件夹的父目录的路径,否则上面的 COPY
命令将失败,因为它没有 "see" 引用的项目文件夹。
通过这种方式,我们实现了所有基本层:数据层、业务层、通用层等。此外,我们设法实现了一种继承机制,例如Base class 作为单独的模块添加,但实际上并未在 IoT Edge 部署 json.
中定义
希望对您有所帮助。
我有两个模块可以很好地构建和部署。但他们都有共享代码,我想将其提取到单独的 "Shared" 项目中。这些模块引用了共享项目,一切似乎都正常。
但是当我想要构建 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)。
是的,据我所知,它不支持边缘模块的共享项目。但是你可以创建一个库项目,构建项目,然后添加 dll 作为对模块的引用 project.It 可以解决。您可以 post 对此要求进行反馈 here。
还在 IoTEdgeDev GitHub 上将此作为问题发布。似乎随着 IoT Edge 的完整发布,有些东西坏了,他们将通过 IoT Edge Dev 的完整发布修复共享项目错误。
@Michael Xu,我已经试过了,我得到了同样的异常。还尝试从我的项目中制作一个 NuGet 包并以这种方式添加它,但没有成功。
我们实际上设法使用共享项目,但棘手的是修改您的 Dockerfile 以包含所有引用的项目。 这必须手动完成。 您必须在 Dockerfile 中添加类似于这一行的行:
COPY ReferencedProjectFolder/ReferencedProject.csproj ReferencedProjectFolder/
但是,您不能使用 VS Build,因为它传递的上下文仅限于正在构建的模块的文件夹。您必须编写自己的 docker build
命令并通过 Powershell 构建模块。该命令可以从 VS Build 输出中复制。但是 build
命令的上下文参数也应该更改为使用父目录。一个例子:
cd <module_folder>
docker build --rm -f $dockerfileName -t $imageNameTagged $buildContext
$buildContext
应该是模块及其所有引用项目都是子文件夹的父目录的路径,否则上面的 COPY
命令将失败,因为它没有 "see" 引用的项目文件夹。
通过这种方式,我们实现了所有基本层:数据层、业务层、通用层等。此外,我们设法实现了一种继承机制,例如Base class 作为单独的模块添加,但实际上并未在 IoT Edge 部署 json.
中定义希望对您有所帮助。