在VS2010 Web项目中发布空目录到一个Web应用程序

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

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

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

希望这可以帮助。

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

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

当您使用VS 2012创build发布configuration文件时,它将在Properties\PublishProfiles文件夹( My Project\PublishProfiles for VB)中生成一个MyPublishProfile.pubxml文件。 这些是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部署:自定义部署包

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

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

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

这个为我工作:

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

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