我有三个配置文件,每个环境一个:
如果我将 ASPNETCORE_ENVIRONMENT 设置为 dev ,我会收到一个运行时异常,抱怨无法找到appsettings.dev.json。我尝试添加
"copyToOutput": [
"appsettings.dev.json"
]
到project.json中的buildOptions
部分,但它似乎没有任何效果。
还有其他方法可以强制将appsettings.dev.json复制到输出目录吗?
答案 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)
答案 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"));
另请参阅我关于确保复制文件的其他答案。