2010-11-23 176 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> 
相關問題