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

Ale*_* G. 14 c# asp.net configuration web-deployment asp.net-core

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

  1. appsettings.json - >制作
  2. appsettings.dev.json - >开发
  3. appsettings.stg.json - > staging

如果我将ASPNETCORE_ENVIRONMENT设置为dev,我会收到一个运行时异常,抱怨无法找到appsettings.dev.json.我尝试添加

"copyToOutput": [
  "appsettings.dev.json"
]
Run Code Online (Sandbox Code Playgroud)

buildOptionsproject.json中的部分,但它似乎没有任何影响.

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

Cod*_*orm 9

在解决方案资源管理器中,右键单击要复制到输出的文件(在您的情况下appsettings.dev.json)并点击Properties,在 Properties 窗口窗格中将Copy To Output Directory选项设置为Copy Always。通过这样做,每次构建项目时,您的文件都会被复制到输出目录(您的项目 bin 或发布目录,具体取决于您的构建配置文件)


Jes*_*ess 8

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

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

在此输入图像描述


Mar*_*ius 8

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

<ItemGroup>
   <None Update="appsettings.IntegrationTests.json">
     <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
   </None>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

这适用于 dotnet build/test/run vscode & visual studio


Iva*_*uba 7

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

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

  • 这将防止引发异常,但是不会回答如何确保复制`.dev.json`文件的问题。 (2认同)

Fab*_*och 7

在"project.json"中包含这个对我有用:

...
"publishOptions": {
  "include": [
    "wwwroot",
     ...
    "appsettings.json",
    "appsettings.Development.json",
    ...
  ]
},
...
Run Code Online (Sandbox Code Playgroud)