【问题标题】:MS Visual Studio: How to exclude certain Project Folders from publishing?MS Visual Studio:如何从发布中排除某些项目文件夹?
【发布时间】:2011-08-31 13:56:20
【问题描述】:

我有一些文件夹,我想保留在项目中,但不想将其包含在发布中。

这可能吗?

【问题讨论】:

标签: c# asp.net .net visual-studio publish


【解决方案1】:

如果它是一个网站项目,您可以排除某些文件夹和/或文件,如下所示(参见元素 ExcludeFoldersFromDeploymentExcludeFilesFromDeployment ):

<?xml version="1.0" encoding="utf-8"?>
<!--
This file is used by the publish/package process of your Web project. You can customize the behavior of this process
by editing this MSBuild file. In order to learn more about this please visit http://go.microsoft.com/fwlink/?LinkID=208121. 
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
        <WebPublishMethod>FileSystem</WebPublishMethod>
        <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
        <LastUsedPlatform>Any CPU</LastUsedPlatform>
        <SiteUrlToLaunchAfterPublish />
        <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
        <ExcludeApp_Data>True</ExcludeApp_Data>
        <publishUrl>D:\YAZILIM\Adopen.2015\PreCompiledWeb</publishUrl>
        <DeleteExistingFiles>True</DeleteExistingFiles>
        <PrecompileBeforePublish>True</PrecompileBeforePublish>
        <EnableUpdateable>True</EnableUpdateable>
        <DebugSymbols>False</DebugSymbols>
        <WDPMergeOption>MergeAllOutputsToASingleAssembly</WDPMergeOption>
        <UseMerge>True</UseMerge>
        <SingleAssemblyName>AdoIntranet</SingleAssemblyName>
        <ExcludeFoldersFromDeployment>customobjects;uploads</ExcludeFoldersFromDeployment> 
        <ExcludeFilesFromDeployment>app.config</ExcludeFilesFromDeployment>
    </PropertyGroup>
</Project>

【讨论】:

  • 这是一个很好的解决方案。如果您需要将这些规则应用于所有发布配置文件,另一个类似的解决方案是创建一个 .wpp.targets 文件。
  • 这个去哪儿了?我有一个 .publishproj 文件,但其中有一条注释说不要修改它。
  • @nasch 发布定义文件存储在 .\App_Data\PublishProfiles 下,扩展名为 .pubxml
  • @nasch:解决方案资源管理器 > 项目 > 属性 > PublishProfiles > your.pubxml
  • 我认为这应该被标记为答案,因为当前一个对于排除整个文件夹无效,除非对其中的每个文件和新添加的文件执行此操作!
【解决方案2】:

Michael 完全正确,通过编辑 .csproj 文件可以手动排除文件/文件夹的发布。

如果您不想弄乱 .csproj 文件,一种更简单的方法是在 VS 解决方案资源管理器中突出显示文件。在属性面板下,将 build to action 从“content”更改为“none”。

这样,您不必从解决方案中卸载项目,加载 .csproj 并为您添加的每个不需要发布的新文件添加一行,而是通过 3 次鼠标单击实现相同的效果.

(假设您在发布选项卡下设置了“仅发布运行此应用程序所需的文件”)

【讨论】:

  • 对于文件夹,看起来您推荐的更简单的方法不起作用,因为“属性”面板上的文件夹没有“构建操作”属性(至少在 VS2010 和 VS2012 中没有)。要排除整个文件夹(而不仅仅是单个文件),您可以使用您在迈克尔的回答中提到的解决方案。
  • @RSW,你是对的。 .cproj 选项明确否决任何标记为“内容”的文件。但是,如果文件夹中没有标记为“内容”的文件,则不会发布该文件夹。我仍然宁愿标记 n 个文件,然后用隐藏/容易忘记的 .csproj 单行文件覆盖这些文件设置 - 但每个文件都有自己的。
  • “.cproj 选项明确否决了任何标记为“内容”的文件”...这很有趣且很重要...我没有认识到!对我来说,无论哪种方式,这都是一个潜在的陷阱……如果我标记整个文件夹,我可能会无意中覆盖其中的某些内容。如果我单独处理文件,我(或其他人)可能会在稍后添加一个文件而忘记排除它。我想就像大多数双刃剑一样,最好完全理解其中的含义,以便您做出的任何选择都是明智的。
【解决方案3】:

您可以在 Web.cspoj 文件中执行“查找和替换”以快速从发布/部署过程中删除特定文件夹

像这样;

<Content Include="Uploads/

<None Include="Uploads/

【讨论】:

    【解决方案4】:

    您可以做的另一种方法是,您可以在 Windows 资源管理器中隐藏不需要发布的文件夹(不是最佳解决方案,但如果您有大量图像仍需要在开发框中,则可以使用)。

    【讨论】:

    • 如果您有一个网站类型的项目,这是唯一的解决方案。 forums.asp.net/post/1997766.aspx
    • 如果您有一个批处理文件进行发布,您可以在发布之前使用 ATTRIB +H FolderNameATTRIB -H FolderName 来设置它在发布后返回
    【解决方案5】:
    • 卸载项目,
    • 右键编辑*.csproj,
    • 添加这个:
    <ItemGroup>
    <Content Update="Data\CernainFolder\*.*">
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </Content>
    </ItemGroup>
    
    • 重新加载项目。

    这应该很好用

    【讨论】:

    • 我使用 Data\CernainFolder 因为我将它放入“Data”文件夹...您必须使用自己的文件夹路径
    【解决方案6】:

    由于问题是用 ASP 标记的,因此没有可以处理的 .proj 文件。在 VS2015 中,还有另一个有用的文件:website.publishproj。而this Asp.Net article on excluding files and folders 提到了.wpp.targets 文件。

    所有这些文件都包含&lt;ItemGroup&gt; 元素,其中可能包含&lt;ExcludeFromPackageFolders&gt; 之类的元素。由于这些似乎记录在案的功能,只需使用它们,不要因为黑客或“搞砸”而感到内疚。对我来说,使用该链接的简单说明排除目录和website.publishproj 文件就像一个魅力!

    【讨论】:

      猜你喜欢
      • 2018-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多