4

我有一个 Web 项目的 C# 解决方案(实际上它是一个 Orchard CMS 站点,但这并不重要),它在 Mercurial 下进行版本控制(使用 Tortoise HG BTW),它有一些项目位于单独的存储库中(并且是解决方案存储库)。Hg 文件永远不会包含在解决方案中的任何位置,它们不会在 Visual Studio 中显示。

当我尝试使用在 Web 项目属性下选择的“仅运行应用程序所需的文件”选项发布解决方案(或构建部署包)时,构建的包包含子存储库的 hg 文件(如整个 .hg 文件夹) .

这基本上是无害的(除了发布一堆不必要的文件),但发布也可能完全失败,并显示以下消息:

将文件 SubRepoFolder.hg\store\data_libraries_parallel_extensions_extras_coordination_data_structures_async_coordination_async_reader_writer.cs.i 复制到 obj\Release\Package\PackageTmp\SubRepoFolder.hg\store\data_libraries_parallel_extensions_extras_coordination_data_structures_async_coordination_async_reader.i 时出错。指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。

我不知道接下来要做什么,如何防止 VS 构建它应该看不到的文件。任何帮助将不胜感激。

4

1 回答 1

2

事实证明,这是一个 Orchard 解决方案是一个重要的事实!

Orchard.Web.csproj 中有这一行:

<Target Name="CustomCollectFiles">
<ItemGroup>
  ...
  <_CustomFiles Include="Media\**\*;App_Data\**\*;Modules\**\*;Themes\**\*;Core\**\*" Exclude="**\obj\**;@(Orchard-Web-Bins -> '**\%(Filename)%(Extension)');**\*.csproj.user;**\*.hg*" />

它用于将文件从 Orchard 特定文件夹复制到构建包。请注意,它应该排除 Mercurial 文件和文件夹,但事实并非如此。我将这一行改为:

<_CustomFiles Include="Media\**\*;App_Data\**\*;Modules\**\*;Themes\**\*;Core\**\*" Exclude="**\obj\**;@(Orchard-Web-Bins -> '**\%(Filename)%(Extension)');**\*.csproj.user;**\.hg\**" />

请注意 .hg 后的“*”。是的,这花了我大约三个小时,浏览了我能找到的每个构建配置选项。

现在这只排除 .hg 文件夹,但不包括 .hg 文件(如 .hgignore 或 .htags),但我不在乎:与包含一堆文件的 .hg 文件夹相反,这些文件是无害的。

这篇博文帮助了我。

于 2012-08-14T11:35:05.757 回答