Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 在发布配置文件中指定要删除的文件?_Visual Studio_Asp.net Core_Msbuild_Csproj - Fatal编程技术网

Visual studio 在发布配置文件中指定要删除的文件?

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>

我有3个不同的设置文件用于.NET Core 2.2应用程序 appsettings.json appsettings.Development.json appsettings.Test.json

我使用的发布配置文件针对特定的构建配置(如测试),在我的发布配置文件中,我添加了此配置文件以尝试删除我不希望部署的appsettings文件。将生产设置部署到开发服务器没有意义

  <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>