NET 核心: 在发布时排除或包含文件

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

{
"exclude": [
"node_modules",
"bower_components"
],
"publishExclude": [
"**.xproj",
"**.user",
"**.vspscc"
]
}

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

109622 次浏览

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

你也可以参考 这个

有关 web 部署,请参见 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/

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

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

  • 一直都是,
  • 保持最新
  • 从来没有

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

例子(来自 给你) :

<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 中查看 偏移发布选择规则类。

Visual Studio 201715.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

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

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

使用 Visual Studio 2017(在15.6.5中测试过) ,您可以右键单击 解决方案资源管理器中的文件并将 构建操作设置为 没有

它会像下面这样更新你的 .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>

希望这个能帮上忙。

在 Visual Studio 15.3或更高版本的 .csproj中,这样可以使文件在 Visual Studio 中保持可见(而“内容删除”不可见) ,并防止文件被发布。

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

在我的例子中,我需要在调试期间在本地使用 本地设置 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>

**

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

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

注意: 需求是保持 wwwroot 及其子文件夹包含在项目中,但只是在发布时排除。

在 Visual Studio 2019

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

enter image description here

  1. 保存解决方案并尝试发布

要在发布时排除文件,请编辑您的发布文件,例如 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>

参见: VisualStudio 发布配置文件-选择性文件包含

Visual Studio 2019:

  1. 转到“解决方案资源管理器”中该文件的“属性”
  2. 将“ Copy to Output Directory”属性更改为所需的值(“ Copy always”、“ Do not Copy”、“ Copy if new”)。

2022年视觉工作室: 卸载 csproj,打开文件 要添加内容和子文件夹,请插入:

<ItemGroup>
<None Update="StaticContent\**">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>

来自@Craig Wilson 的解决方案在 Visual Studio 2022和 Core 6的发布中表现出色

下面是一个示例,当您在系统级别(如 ASPNEtCORE _ ENVIRONMENT = QA)设置一个环境变量时,它将排除 appsetings.json 和 appseting.QA.json 之外的所有应用程序设置

在 windows 中,你也可以在运行 dotnet pubish 命令的 powershell 中动态设置环境变量。

$env: ASPNETCORE _ ENVIRONMENT = ‘ QA’

当你关闭 Powershell 时,这个变量将被删除

    <!-- Publish Settings -->
<ItemGroup>
<Content Update="appsettings.*.json">
<CopyToPublishDirectory>Never</CopyToPublishDirectory>
</Content>
<Content Update="appsettings.$(ASPNETCORE_ENVIRONMENT).json">
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
</Content>
<Content Update="appsettings.$(ASPNETCORE_ENVIRONMENT).json">
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
</Content>
</ItemGroup>

请注意,在 VisualStudio2022中默认包含所有文件,只需使用 Update 即可