在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该文件夹。