40

即使目录是空的,我也经常需要发布一个保留目录树的 Web 项目,例如,保存上传文件的目录。如果我使用 VS2010 发布命令发布我的应用程序,则不会在 Web 服务器上的远程文件系统上创建空目录。

有没有办法强制 VS 在目标目录上创建某些文件夹,尽管是空的?谢谢!

4

5 回答 5

41

不,这是不可能的,恐怕我们遇到了同样的问题。如果希望预编译工具生成这些空文件夹,则需要在每个空目录中创建一个 placeholder.txt 文件。如果您无法创建一个命令行应用程序,它将在您的构建后事件中创建文件夹(但前提是您使用的是 Web 应用程序项目而不是网站项目)。

希望这可以帮助。

于 2010-11-24T09:44:33.303 回答
8

我知道这个问题提到Visual Studio 2010但我来这里寻找同样的问题......

我正在使用Visual Studio 2012并找到一种很好/优雅的方法来克服这种烦人的情况。我认为它也可以工作VS 2010并且比在空文件夹中添加虚拟空文件更好。

当您使用它创建发布配置文件时VS 2012,将在文件夹中生成一个MyPublishProfile.pubxml文件Properties\PublishProfilesMy Project\PublishProfiles对于 VB)。这些是MSBuild文件,可以编辑它们以自定义发布过程。在我们的例子中,我们可以在发布实际发生之前将一个目标注入到发布过程中,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <AfterAddIisSettingAndFileContentsToSourceManifest>CreateEmptyFolders
    </AfterAddIisSettingAndFileContentsToSourceManifest>
  </PropertyGroup>
  <Target Name="CreateEmptyFolders">
    <Message Text="Adding empty folder to hold Files" />
    <MakeDir Directories="$(_MSDeployDirPath_FullPath)\Files\MyEmptyFolder"/>
  </Target>
</Project>

该属性AfterAddIisSettingAndFileContentsToSourceManifest包含在准备好部署包的内容后将调用的目标的名称。这是向包中添加其他文件或文件夹的最佳时机。


代码和文本混合来自:

如何仅在 VS 2012 中的 Web 部署发布任务之前执行 PowerShell 脚本?

Web 部署:自定义部署包

于 2013-04-30T17:09:08.680 回答
3

有一个关于这个问题的错误报告给微软,他们说他们不会修复它。 http://connect.microsoft.com/VisualStudio/feedback/details/546356/publish-deploy-does-not-deploy-empty-folders

太糟糕了。因为它曾经在 Visual Studio 2008 中工作。

请注意,不必实际部署虚拟文件。它只需要作为项目的一部分存在于构建环境中。

于 2012-02-21T17:42:33.420 回答
2

这个对我有用:

编辑 Visual Studio 生成的发布 pubxml 文件,如 Leniel Macaferi 提到的,然后添加:Visual Studio 已经生成了类似的属性

<publishUrl>f:\publish_web</publishUrl>

在里面

<PropertyGroup>    

部分,所以我像这样使用它:添加到部分:

 <PipelineDependsOn>
      CustomBeforePublish;
      $(PipelineDependsOn);
    </PipelineDependsOn>  

并补充道:

<Target Name="CustomBeforePublish">
    <Message Text="CustomBeforePublish task:"/>
    <MakeDir Directories="$(publishUrl)\MyFolder\MyFolder2"/>
  </Target>
于 2015-07-26T22:28:19.550 回答
1

在空文件夹内添加一个 Default.aspx 文件。您可以将其留空,然后它将在 PreCompiled 版本中创建文件夹。

于 2013-09-30T20:22:27.763 回答