gpt4 book ai didi

asp.net - 如何防止从 _bin_deployableAssemblies 文件夹中复制隐藏的 .svn 文件夹?

转载 作者:行者123 更新时间:2023-11-30 23:46:13 27 4
gpt4 key购买 nike

我使用 _bin_deployableAssemblies 文件夹在每次构建后将 ASP.NET MVC 程序集复制到 bin 文件夹。不幸的是,MSBuild 任务还会复制隐藏的 .svn 文件夹。

第一次尝试修复

我想在项目层面解决这个问题,所以我添加了一个 RemoveDir任务到AfterBuild .csproj 文件中的目标,适用于正常构建。

<RemoveDir Directories="@(OutDir).svn" />

但是当我 时它似乎不起作用发布 网站。发布后,.svn 文件夹将复制到发布向导的目标文件夹中。奇怪的是它也最终出现在项目的/bin 文件夹中,尽管 RemoveDir任务!

在目标文件 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets 中动态创建项目组以包含文件夹 _bin_deployableAssemblies 中的所有文件:
<CreateItem Include="$(MSBuildProjectDirectory)\_bin_deployableAssemblies\**\*.*" 
Condition="Exists('$(MSBuildProjectDirectory)\_bin_deployableAssemblies')">
<Output ItemName="_binDeployableAssemblies" TaskParameter="Include"/>
</CreateItem>

使用 Message AfterBuild 中的任务target 我可以看到这个项目组包含了 .svn 文件夹中的所有文件。

第二次尝试修复

所以我尝试了以下技巧来调整 .AfterBuild 目标中的项目组:
<ItemGroup>
<_binDeployableAssemblies Remove="$(MSBuildProjectDirectory)\_bin_deployableAssemblies\.svn\**\*.*" />
</ItemGroup>

如果我在此之后使用 Message 打印文件列表我可以看到它不再包含 .svn 文件夹中的文件。 但是 , .svn 文件在构建或发布时仍然复制到输出文件夹!

可能的实际修复

似乎 Publish 命令首先执行常规构建,此时我们可以使用 AfterBuild 目标删除文件。但随后它会将文件复制到一个临时位置(在/obj 文件夹中)以发布它们。在此阶段,它似乎将所有内容从 _bin_deployableAssemblies 复制到 bin 再次然后才将 bin(和其他项目文件)复制到临时位置。这似乎发生了 build 后。

因此,诀窍可能是在将项目文件复制到临时文件夹之前,在某处挂接进程。或者之后,但不仅需要清理临时文件夹,还需要第二次清理原始 bin 文件夹。这可以通过连接到许多 DependsOn 目标之一来实现。

如果没有合适的目标来执行此操作,那么从某个中间项目组中删除文件可能是一种解决方案,因此它们实际上永远不会被复制或发布。

由于对发布过程缺乏了解,我无法实现这些可能的修复中的任何一个。

主要问题

如何防止文件被复制或在复制后删除文件?如何为常规构建和发布命令执行此操作?

最佳答案

将此添加到您的 .csproj 文件(或 {projectName}.wpp.targets 文件):

  <PropertyGroup>
<OnAfterCopyAllFilesToSingleFolderForPackage>
__RemoveSvnFromPackageTemp
</OnAfterCopyAllFilesToSingleFolderForPackage>
</PropertyGroup>

<Target Name="__RemoveSvnFromBin" AfterTargets="_CopyBinDeployableAssemblies">
<Message Text="Removing .SVN from BIN" Importance="normal"/>
<RemoveDir Directories="$(OutDir).svn" />
</Target>

<Target Name="__RemoveSvnFromPackageTemp">
<Message Text="Removing .SVN from PackageTempDir" Importance="normal"/>
<RemoveDir Directories="$(_PackageTempDir)\bin\.svn" />
</Target>

这适用于构建、打包和发布!

关于asp.net - 如何防止从 _bin_deployableAssemblies 文件夹中复制隐藏的 .svn 文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6904375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com