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

时间:2017-03-10 06:50:23

标签: c# asp.net asp.net-core visual-studio-2017

aspdotnet1.0文件

之前有project.json个包含/排除部分
{
  "exclude": [
    "node_modules",
    "bower_components"
  ],
  "publishExclude": [
    "**.xproj",
    "**.user",
    "**.vspscc"
  ]
}

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

10 个答案:

答案 0 :(得分:70)

  

来自documentation:如果您希望指定某些文件与您的应用一起发布,您仍然可以使用csproj中的已知机制(例如<Content> 1}}元素)。

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

  • 总是,
  • PreserveNewest
  • 从不

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

示例(来自here):

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

答案 1 :(得分:19)

Visual Studio 2017 15.3之后

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

<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

答案 2 :(得分:10)

在Visual Studio 15.3及更高版本的<div class="one"></div> <div class="two"></div>中,这会使文件在Visual Studio中可见(而#34;内容删除&#34;不会),并阻止文件发布。

.csproj

答案 3 :(得分:7)

使用 Visual Studio 2017 (在15.6.5中测试),您可以右键单击解决方案资源管理器中的文件并设置构建操作< / strong>至

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

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

希望这有帮助。

答案 4 :(得分:6)

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

<ItemGroup>
  <Content Update="wwwroot\dummy\**\*">
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
  </Content>
</ItemGroup>

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

答案 5 :(得分:4)

我注意到我的文件夹中有几个文件没有被发布 - 我试图右键单击项目中的文件夹,看看我是否可以选择一个选项来包含部署文件夹 - 它不在那里,但是我确实发现如果我选择文件夹中的文件并将其标记为在部署时复制,它将复制文件在此过程中创建其文件夹。

如果您的文件夹包含文件,这会有所帮助,但如果您的文件夹为空则无效。

答案 6 :(得分:3)

要在发布时排除文件,请编辑您的发布文件,例如FolderProfile.pubxml,并添加如下所示的适当 XML 元素以包含/排除文件和文件夹。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <PublishProvider>FileSystem</PublishProvider>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <PublishFramework />
    <ProjectGuid>afa9f185-7ce0-4935-9da1-ab676229d68a</ProjectGuid>
    <publishUrl>bin\Release\PublishOutput</publishUrl>
    <DeleteExistingFiles>False</DeleteExistingFiles>
  </PropertyGroup>
  <ItemGroup>

    <!-- CopyToPublishDirectory = { Always, PreserveNewest, Never } -->

    <!-- Copying a file located outside of the project into the published site's wwwroot folder. -->
    <ResolvedFileToPublish Include="..\ReadMe2.md">
      <RelativePath>wwwroot\ReadMe2.md</RelativePath>
      <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
    </ResolvedFileToPublish>

    <!-- Excluding the wwwroot\Content folder. -->
    <Content Update="wwwroot\Content\**\*" CopyToPublishDirectory="Never" />

    <!-- Excluding the Views\Home\About2.cshtml file. -->
    <Content Update="Views\Home\About2.cshtml" CopyToPublishDirectory="Never" />
  </ItemGroup>
</Project>

另见:Visual Studio publish profiles - Selective file inclusion

答案 7 :(得分:2)

就我而言,在调试过程中需要在本地安装 local.settings.json ,但我不希望在发布版本或发布期间将其包含在WebDeploy zip文件中。

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

**

答案 8 :(得分:1)

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

您也可以参考this

对于网络部署,请参阅https://blogs.msdn.microsoft.com/webdev/2010/04/22/web-deployment-excluding-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/

答案 9 :(得分:0)

在Visual Studio 2019中

  1. 右键单击文件->属性
  2. 复制到输出目录->始终复制

enter image description here

  1. 保存解决方案,然后尝试发布