使用Docker自定义Visual Studio运行配置

时间:2017-05-31 08:51:26

标签: visual-studio docker .net-core docker-compose

我正在使用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会使用我的自定义配置吗?

2 个答案:

答案 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。在此之后,您的更改将适用于管道构建。享受