【问题标题】:publish empty directories to a web application in VS2010 web project将空目录发布到 VS2010 Web 项目中的 Web 应用程序
【发布时间】:2010-11-23 15:27:31
【问题描述】:

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

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

【问题讨论】:

    标签: visual-studio-2010 directory publish webproject


    【解决方案1】:

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

    希望这会有所帮助。

    【讨论】:

    • 这对我有用...很奇怪的问题..还是谢谢:)
    【解决方案2】:

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

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

    当您使用VS 2012 创建发布配置文件时,它将在Properties\PublishProfiles 文件夹中生成一个MyPublishProfile.pubxml 文件(My 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 保存在准备好部署包的内容后将调用的目标的名称。这是向包中添加其他文件或文件夹的最佳时机。


    代码和文本混合来自:

    How to execute a PowerShell script only before a web deploy Publish task in VS 2012?

    Web Deploy : Customizing a deployment package

    【讨论】:

    • 嗯,对我没用。我有一种感觉,我错过了一些东西。我已将您的代码粘贴到现有发布配置文件的底部,但什么也没有。
    【解决方案3】:

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

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

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

    【讨论】:

    • 看起来这个答案的注释是错误的。将构建操作设置为“无”会阻止在 IIS 服务器上创建文件夹。
    • 多么烦人的错误! 'None' 和 'Compile' 都没有帮助......所以现在我的文件被命名为“ReadMe.txt”,它的内容是“This is a folder that blah blah blah”(使用“内容”编译模式)。
    • 注释是正确的。将 Build Action 设置为“Content”,将 Copy to Output Directory 设置为“Do not copy”
    • 太糟糕了,现在连接链接好像失效了。
    【解决方案4】:

    这个对我有用:

    编辑 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>
    

    【讨论】:

    • 在 VS 2013 中为我工作。澄清一下:将 &lt;PipelineDependsOn&gt; 添加到与 &lt;publishUrl&gt; 相同的 &lt;PropertyGroup&gt; 中,然后在 &lt;Target&gt; 之后添加 &lt;Target&gt;。
    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2014-06-11
      相关资源
      最近更新 更多