2010-11-23 172 views
38

通常,我需要发布保存目录树的Web项目,即使目录为空,例如用于保存上载文件的目录。 如果我使用VS2010发布命令发布我的应用程序,则不会在Web服务器上的远程文件系统上创建空目录。将空目录发布到VS2010 Web项目中的Web应用程序

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

回答

40

不,这是不可能的恐怕我们有同样的问题。如果您希望预编译工具生成这些空文件夹,则需要在每个空目录中创建一个placeholder.txt文件。如果没有,你可以创建一个命令行应用程序,它会在你的后期构建事件中创建文件夹(但只有当你使用的是web应用程序项目而不是web站点项目时)。

希望这会有所帮助。

+3

谢谢你 - 这样一个令人沮丧的错误.. – Adam 2012-07-17 15:34:04

+0

很沮丧... – Baxter 2012-12-10 18:20:07

+0

这个工作对我来说...很奇怪的问题..还是谢谢:) – 2016-05-24 06:26:47

3

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

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

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

+1

看起来像这个答案的说明是错误的。将生成操作设置为无将停止在IIS服务器上创建文件夹。 – GoClimbColorado 2013-02-26 17:49:42

8

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

我使用Visual Studio 2012,发现克服这种恼人的情况很好/优雅的方式。我认为它也可以在VS 2010中工作,并且比在空文件夹内添加虚拟空文件要好。

当你创建一个发布配置与VS 2012它会生成一个MyPublishProfile.pubxml文件中Properties\PublishProfiles文件夹(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

0

内部的空余文件夹添加一个Default.aspx文件。您可以将其保留为空,然后在预编译版本中创建文件夹。

2

对我来说这一次的工作:

编辑您发布的Visual Studio生成,如Leniel Macaferi提到,再加入此pubxml文件: 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> 
相关问题