关于c#:ASP.NET Core:在发布时排除或包含文件

ASP.NET Core: Exclude or include files on publish

project.json文件中的aspdotnet1.0包含/排除部分之前

1
2
3
4
5
6
7
8
9
10
11
{
 "exclude": [
   "node_modules",
   "bower_components"
  ],
 "publishExclude": [
   "**.xproj",
   "**.user",
   "**.vspscc"
  ]
}

ASP.NET Core 1.1中的本节在哪里(没有project.json)?
.csproj文件或.pubxml上是否有类似的部分?


From documentation: if you wish to specify, for example, some files to get published with your app, you can still use the known mechanisms in csproj for that (for example, the element).

ItemGroup元素有一个CopyToPublishDirectory属性,该属性确定是否将文件复制到发布目录,并且可以具有以下值之一:

  • 总是,
  • 保留最新
  • 决不

注意,输出文件夹也有类似的CopyToOutputDirectory属性。

示例(从此处开始):

1
2
3
4
5
6
7
8
9
<ItemGroup>

  <None Include="notes.txt" CopyToOutputDirectory="Always" />
  <!-- CopyToOutputDirectory = { Always, PreserveNewest, Never } -->

  <Content Include="files\\**\\*" CopyToPublishDirectory="PreserveNewest" />
  <None Include="publishnotes.txt" CopyToPublishDirectory="Always" />
  <!-- CopyToPublishDirectory = { Always, PreserveNewest, Never } -->
</ItemGroup>

如果您对project.json -.csproj迁移如何使用CopyToPublishDirectory属性来迁移发布选项感兴趣,可以在dotnet cli repo中查看MigratePublishOptionsRule类。


在Visual Studio版本15.3和更高版本的.csproj中,这使文件在Visual Studio中可见(而" Content Remove"则不可见),并阻止了文件的发布。

1
2
3
<ItemGroup>
    <Content Update="appsettings*.json" CopyToPublishDirectory="Never" />
</ItemGroup>


在Visual Studio 2017 15.3之后

编辑.csproj文件以手动排除文件/文件夹不被发布

1
2
3
4
<ItemGroup>
  <Content Remove="src\\**" />
  <Content Remove="node_modules\\**" />
</ItemGroup>

参考:https://www.danielcrabtree.com/blog/273/fixing-the-duplicate-content-error-after-upgrading-visual-studio-2017


使用Visual Studio 2017(在15.6.5中进行测试),您可以在解决方案资源管理器中右键单击该文件并将Build Action设置为None。

它将像这样更新您的.csproj文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<ItemGroup>
  <Content Remove="appsettings.Development.json" />
  <Content Remove="appsettings.json" />
  <Content Remove="npm-shrinkwrap.json" />
  <Content Remove="package.json" />
  <Content Remove="tsconfig.json" />
</ItemGroup>

<ItemGroup>
  <None Include="appsettings.Development.json" />
  <None Include="appsettings.json" />
  <None Include="npm-shrinkwrap.json" />
  <None Include="package.json" />
  <None Include="tsconfig.json" />
</ItemGroup>

希望这可以帮助。


对于Visual Studio 2019,我设法使用以下代码从发布输出中排除了一个名为" dummy"的wwwroot子文件夹(包括" dummy"的所有子文件夹):

1
2
3
4
5
<ItemGroup>
  <Content Update="wwwroot\\dummy\\**\\*">
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
  </Content>
</ItemGroup>

注意:要求是将wwwroot及其子文件夹保留在项目中,但在发布时将其排除在外。


我注意到其中包含几个文件的文件夹没有被发布-我尝试右键单击项目中的文件夹以查看是否可以选择一个选项来将文件夹包含在部署中-该文件夹不存在,但是我确实找到了我选择文件夹中的文件,并标记它们以在部署时进行复制,它将在过程中复制文件并创建其文件夹。

如果您的文件夹中有文件,这会有所帮助,但如果您的文件夹为空,则不会有帮助。


就我而言,在调试过程中需要在本地使用local.settings.json,但我不希望在Release版本或Publish过程中将其包含在WebDeploy zip文件中:

1
2
3
4
5
6
7
8
  <ItemGroup>
    <Content Include="..\\local.settings.json" Link="local.settings.json" Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="..\\local.settings.json" Link="local.settings.json" Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

**


编辑.csproj文件以手动排除文件/文件夹不被发布。

你也可以参考这个

对于Web部署,请参阅https://blogs.msdn.microsoft.com/webdev/2010/04/22/web-deployment-exception-files-and-folders-via-the-web-applications-project-file/。

project.json现在已由csproj代替。您可以在https://www.stevejgordon.co.uk/project-json-replaced-by-csproj上了解更多信息。

对于升级现有的.NET Core 1.0项目或使用.NET Core 1.1,您可以阅读https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-net-core-1-1/。