我正在使用Visual Studio 2017中的Docker设置.NET Core项目。我创建了项目并将docker-compose添加到解决方案中,一切正常。
但不知何故,除了 Debug 和 Release 之外,VS不会使用任何配置构建和运行Docker。
我创建了名为 Preproduction 的解决方案和项目配置并选择了它,并创建了一个 docker-compose.vs.preproduction.yml 文件。
但是当我运行预生产配置时,项目就会像选择 Release 一样运行。 Build Output控制台还显示以下内容:
*docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml" -f "docker-compose.vs.debug.yml" -p dockercompose3979710767*
*docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml" -f "docker-compose.vs.release.yml" -p dockercompose3979710767*
*docker-compose -f "docker-compose.yml" -f "docker-compose.override.yml" -f "docker-compose.vs.release.yml" -p dockercompose3979710767*
注意第二个yml文件。 它以某种方式使用了发布文件,而不是我添加的自定义配置文件。
有没有人知道如何解决这个问题,所以docker会使用我的自定义配置吗?
答案 0 :(得分:1)
不幸的是,这是不可能的。经过花费大量时间来弄清楚,结果发现这两个文件名被硬编码到DLL中。所有不是'DEBUG'的东西都会使用'RELEASE'文件。
通过从不同文件夹引用它们来使用不同的docker-compose.yml文件可能是一种解决方案,但由于它不是标准项目而是Docker项目,因此您无权访问后期构建事件以复制所需文件那里。此外,您不能拥有多个Dockerfile,因为它也基于名称约定。
您可以使用一个版本进行开发和测试,在包含的文件中定义并创建一个脚本,该脚本根据您现有的撰写文件和您的额外文件手动构建所有内容。
答案 1 :(得分:1)
我提供了一些非标准的解决方案,可以解决这个问题。开始了: 1)获取dnSPY工具(https://github.com/0xd4d/dnSpy/releases)
2)安装
3)查找文件Microsoft.Docker.dll(对我而言,它位于" C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Enterprise \ MSBuild \ Sdks \ Microsoft.Docker。 Sdk \ tools "方式。)
4)获取此文件的副本(例如,在某个目录中复制)。
5)在dnSpy.exe中打开此dll
6)去Microsoft.Docker(版本号) - > Microsoft.Docker.dll - > DockerComposeClient类 - > MergedDockerComposeDocumentProvider私有类 - > GetDocuments私有方法
7)在此方法中,您可以看到用于构建的所有文件路径和文件
8)右键点击必要的字符串 - >编辑IL指令
9)编辑你需要的东西(就我而言,我能够将docker-compose.override.yml改为docker-compose.development.yml)
10)保存更改
11)文件 - >保存模块并保存升级后的DLL。
WHOILA !!!其实 你必须重启VS和docker。在此之后,您的更改将适用于管道构建。享受