C# 如何确保将appsettings.dev.json复制到输出文件夹?
我有三个配置文件,每个环境一个:C# 如何确保将appsettings.dev.json复制到输出文件夹?,c#,asp.net,configuration,asp.net-core,web-deployment,C#,Asp.net,Configuration,Asp.net Core,Web Deployment,我有三个配置文件,每个环境一个: appsettings.json->production appsettings.dev.json->development appsettings.stg.json->staging 如果我将ASPNETCORE_ENVIRONMENT设置为dev,就会出现运行时异常,抱怨无法找到appsettings.dev.json。我试着加上 "copyToOutput": [ "appsettings.dev.json" ] 指向project.json中的bu
"copyToOutput": [
"appsettings.dev.json"
]
指向project.json中的buildOptions
部分,但它似乎没有任何效果
是否有其他方法可以强制将appsettings.dev.json复制到输出目录?是否设置了放置appsettings.dev.json的基本路径
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
在“project.json”中包含这一点对我很有用:
...
"publishOptions": {
"include": [
"wwwroot",
...
"appsettings.json",
"appsettings.Development.json",
...
]
},
...
假设您正在使用Visual Studio: 通常在过去,对于服务,我让其他开发人员设置“构建事件”,以确保项目中的某些内容得到构建。通常,它位于Visual Studio 2015的ASP.NET项目属性中,例如:>“生成事件”(左窗格)>单击“编辑生成后”。在命令行中编写项目应如何生成输出的说明。例如:
mkdir "$(ProjectDir)bin\Setup"
在bin下创建一个名为“Setup”的目录
Del "$(ProjectDir)bin\Setup\*.* /Q"
删除新创建的箱子中的所有现有项目
copy "$(TargetDir)*.dll" "$(ProjectDir)bin\Setup"
将dll从生成位置复制到新的安装位置
现在,如果您正在执行一个构建过程,其中您的“配置管理器”正在为每个环境执行不同的输出,并且您只希望在任何时候都使用它们,那么您可能需要向上遍历一个级别,通过它们的名称“dev”或“stg”找到这些容器,然后将它们复制回来。您可以创建或列出VS知道的与JSON数据匹配的环境变量 在我的例子中,没有为单元测试复制appsettings.json
如果右键单击文件并选择属性,则会出现此对话框。将构建操作更改为嵌入式资源,文件将被复制到bin文件夹中,以便单元测试拾取
在解决方案资源管理器中右键单击要复制到输出的文件(在您的情况下为
appsettings.dev.json
),然后点击属性,在属性窗格中将复制到输出目录选项设置为始终复制。这样,每次生成项目时,您的文件都会复制到输出目录中(您的项目bin或发布目录取决于您的生成配置文件)如果您要将文件复制到输出文件夹中,您可以将其添加到csproj文件中:
<ItemGroup>
<None Update="appsettings.IntegrationTests.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
保存最新
这与dotnet构建/测试/运行vscode和visualstudio配合使用我学会了一些其他很酷的方法 您可以从另一个项目获取设置文件
.SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
.AddJsonFile("appsettings.json")
.Build();
或者,这更酷。您可以指定其他项目并从中加载设置文件。这样,在不同的项目中就不需要重复的副本或配置文件
.UseStartup<API.Startup>()
.ConfigureAppConfiguration(config => config.AddJsonFile("appsettings.json"));
.UseStartup()
.ConfigureAppConfiguration(config=>config.AddJsonFile(“appsettings.json”);
另请参阅我关于确保文件被复制的另一个答案。您已经从Ivan那里得到了答案。也许指出这是否适用于您是一个好主意?我找不到一个解决方案来为每个环境部署特定的文件。您可以配置为部署所有project*.json文件-但这不是一个好选项,最理想的方案是每个环境1对1文件(配置名称)-悬赏是开放的:)请参阅,以获取特定于环境的appsettings的可能解决方案。这将防止引发异常,但是没有回答如何确保
.dev.json
文件被复制的问题。。。并检查您的.vscode/launch.json->“cwd”路径。将此从“${workspaceRoot}”设置为“${workspaceRoot}\src\myproject”对我有效。对我无效。它工作了一次,因为project.json发生了更改,并导致项目重新生成。唯一有效的解决方案-调用重建而不是生成。它同时适用于编译选项和发布选项。+1-最初与此相同,只是元素名为。其他一切都是一样的,但都不起作用。将其更改为“无”可以使其正常工作