如何确保将appsettings.dev.json复制到输出文件夹?

时间:2016-07-04 06:44:12

标签: c# asp.net configuration asp.net-core web-deployment

我有三个配置文件,每个环境一个:

  1. appsettings.json - >生产
  2. appsettings.dev.json - >发展
  3. appsettings.stg.json - >分期
  4. 如果我将 ASPNETCORE_ENVIRONMENT 设置为 dev ,我会收到一个运行时异常,抱怨无法找到appsettings.dev.json。我尝试添加

    "copyToOutput": [
      "appsettings.dev.json"
    ]
    

    到project.json中的buildOptions部分,但它似乎没有任何效果。

    还有其他方法可以强制将appsettings.dev.json复制到输出目录吗?

7 个答案:

答案 0 :(得分:7)

将此包含在" project.json"适合我:

...
"publishOptions": {
  "include": [
    "wwwroot",
     ...
    "appsettings.json",
    "appsettings.Development.json",
    ...
  ]
},
...

答案 1 :(得分:6)

您是否设置了放置appsettings.dev.json的基本路径?

var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

答案 2 :(得分:6)

就我而言, appsettings.json 未被复制用于单元测试。

如果右键单击该文件并选择属性,则会出现此对话框。将构建操作更改为嵌入式资源,该文件将被复制到bin文件夹以供单元测试选择。

enter image description here

答案 3 :(得分:3)

如果要将文件复制到输出文件夹,可以将其添加到csproj文件:

<ItemGroup>
   <None Update="appsettings.IntegrationTests.json">
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
   </None>
</ItemGroup>

这可与dotnet构建/测试/运行vscode和Visual Studio一起使用

答案 4 :(得分:2)

假设您使用的是Visual Studio:

通常,对于过去的服务,我已经设置了其他开发人员并且建立活动&#39;确保项目中的某些内容得以构建。通常,它将以Visual Studio 2015的ASP.NET项目属性为例:&gt;&#39;构建事件&#39;(左窗格)&gt;单击&#39;编辑后构建&#39;。在命令行中写入项目应如何构建以输出的说明。 EG:

mkdir "$(ProjectDir)bin\Setup"  

在bin下创建名为&#39; Setup&#39;

的目录
Del "$(ProjectDir)bin\Setup\*.* /Q"

删除新创建的bin中的所有现有项目

copy "$(TargetDir)*.dll"  "$(ProjectDir)bin\Setup"

将dll从构建位置复制到新的设置位置

现在,如果您正在进行构建过程,而您的配置管理器会在其中进行。正在为每个环境做一个不同的输出,你只需要它们中的每一个,你可能需要遍历一个级别,找到他们的名字&#39; dev&#39;或者&#39; stg&#39;然后将它们复制回来。您可以创建或列出VS知道的与您的JSON数据匹配的环境的变量。

答案 5 :(得分:2)

在解决方案资源管理器中,右键单击要复制到输出的文件(在您的情况下为appsettings.dev.json),然后在“属性”窗口窗格中单击属性设置复制到输出目录选项为始终复制。这样,每次构建项目时,文件都会被复制到输出目录(您的项目bin或release目录,具体取决于您的构建配置文件)

答案 6 :(得分:0)

我学到了其他一些很酷的方法来做到这一点!

您可以从另一个项目中获取设置文件。

.SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
.AddJsonFile("appsettings.json")
.Build();

或者,这更酷。您可以指定不同的项目并从那里加载设置文件。那么你就不需要在不同的项目中重复复制或配置文件了。

.UseStartup<API.Startup>()
.ConfigureAppConfiguration(config => config.AddJsonFile("appsettings.json"));

另请参阅我关于确保复制文件的其他答案。