Visual studio 在发布配置文件中指定要删除的文件?
我有3个不同的设置文件用于.NET Core 2.2应用程序 appsettings.json appsettings.Development.json appsettings.Test.json 我使用的发布配置文件针对特定的构建配置(如测试),在我的发布配置文件中,我添加了此配置文件以尝试删除我不希望部署的appsettings文件。将生产设置部署到开发服务器没有意义Visual studio 在发布配置文件中指定要删除的文件?,visual-studio,asp.net-core,msbuild,csproj,Visual Studio,Asp.net Core,Msbuild,Csproj,我有3个不同的设置文件用于.NET Core 2.2应用程序 appsettings.json appsettings.Development.json appsettings.Test.json 我使用的发布配置文件针对特定的构建配置(如测试),在我的发布配置文件中,我添加了此配置文件以尝试删除我不希望部署的appsettings文件。将生产设置部署到开发服务器没有意义 <PropertyGroup> <ExcludeFilesFromDeployment>
<PropertyGroup>
<ExcludeFilesFromDeployment>appsettings.json</ExcludeFilesFromDeployment>
<ExcludeFilesFromDeployment>appsettings.Development.json</ExcludeFilesFromDeployment>
</PropertyGroup>
但是,当我发布时,因为在VisualStudio中,所有3个文件都存在。如何指定在发布时删除其他2个文件
我也试着把它放在我的csproj文件中,但所有3个文件最终都被发布了
对此不是100%确定,但只是想一想,您是否尝试过将这些设置为仅在与预期的构建配置匹配时进行复制,例如
<ItemGroup>
<None Update="appsettings.json" CopyToPublishDirectory="PreserveNewest" Condition=" '$(Configuration)' == 'Production' "/>
<None Update="appsettings.Development.json" CopyToPublishDirectory="PreserveNewest" Condition=" '$(Configuration)' == 'Development' "/>
<None Update="appsettings.Test.json" CopyToPublishDirectory="PreserveNewest" Condition=" '$(Configuration)' == 'Test' "/>
</ItemGroup>
另外,请检查您的.net core版本是否受不确定的影响,但请将其放入您的.csproj文件中,以检查它是否有帮助。它在我这边的vs2017.net core中工作
<ItemGroup Condition="'$(Configuration)' == 'Test'">
<Content Remove="appsettings.Development.json" />
<None Include="appsettings.Development.json" />
<Content Remove="appsettings.json" />
<None Include="appsettings.json" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Release'">
<Content Remove="appsettings.Test.json" />
<None Include="appsettings.Test.json" />
<Content Remove="appsettings.json" />
<None Include="appsettings.json" />
</ItemGroup>
通常我会为不同的部署和不同的机器创建不同的生成配置,因此我会将其他appsettings命名为生成配置名称。 因此,我在.csproj文件中使用了这个小模式
<Choose>
<When Condition="'$(Configuration)' == 'Debug'">
<ItemGroup>
<None Include="appsettings*.json" CopyToOutputDirectory="Always" CopyToPublishDirectory="Always" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<Content Remove="appsettings*.json" />
<None Include="appsettings.json;appsettings.$(Configuration).json" CopyToOutputDirectory="Always" CopyToPublishDirectory="Always" />
</ItemGroup>
</Otherwise>
<Choose>
生成配置与ASP.NET核心应用程序无关。由于没有类似配置转换之类的东西,因此可以将相同的已发布应用程序代码放在任何环境中。最终控制特定于环境的配置获取加载的是ASPNETCORE_环境变量的值,而不是发布方式。这就是为什么发布包括所有文件;没有任何机制可以事先知道哪些是相关的,哪些不是相关的。在实践中,这几乎不是一个问题。无论如何,这些JSON文件中不应包含任何机密信息,所以谁会关心您的开发服务器上是否存在appsettings.Production.JSON呢?
<Choose>
<When Condition="'$(Configuration)' == 'Debug'">
<ItemGroup>
<None Include="appsettings*.json" CopyToOutputDirectory="Always" CopyToPublishDirectory="Always" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<Content Remove="appsettings*.json" />
<None Include="appsettings.json;appsettings.$(Configuration).json" CopyToOutputDirectory="Always" CopyToPublishDirectory="Always" />
</ItemGroup>
</Otherwise>
<Choose>