2013-05-29 42 views
2

我們的azure版本存在問題,只有在我們的csdef文件的WebRole/Contents/Content/SourceDirectory部分中使用絕對路徑時,才能使其運行。雖然它確實支持相對路徑(包括'..')和環境變量(如同在SET中一樣),但問題是我們無法獲得任何非絕對路徑來成功構建,因爲它出現.csdef文件被「驗證」兩次:一次在打包之前它在項目目錄中的位置,以及在它被移動到/ bin文件夾之後再一次。顯然,如果我們在兩個不同的地方開始,沒有一個相對路徑能夠解析到相同的內容目錄!你可以做的是爲兩個構建步驟階段中的一個獲得正確的路徑......但是然後它會失敗。有問題的目標是調用ValidateServiceFiles任務的PreValidateServiceModel。是WindowsAzure.targets ValidateServiceFiles是基本構建步驟嗎?

爲了使我的項目使用相對路徑生成,我需要禁用PreValidateServiceModel目標。包裝似乎工作,雖然我擔心跳過目標(除了顯而易見的...服務文件未驗證!)正在錯過一些重要的過程!)。這就是說.csdef文件仍然是「驗證」的,因爲它必須被解析來創建包。

回答

1

我有類似的問題。檢查documentation on the Source directory element of the WebRole schema,我看到目錄路徑中的環境變量extent被支持。這使我得到以下解決方案。

在包含csdef文件的項目的預生成事件,我從UpdaterFiles目錄複製我的文件到一個目錄下的Temp目錄下:

IF NOT EXIST %TEMP%\UpdaterFiles MKDIR %TEMP%\UpdaterFiles 
XCOPY $(ProjectDir)..\UpdaterFiles\*.* %TEMP%\UpdaterFiles\ /Y 

然後我的源目錄只是變成:

<SourceDirectory path="%TEMP%\UpdaterFiles" /> 

上述工程就像一個魅力

1

這裏是一個不同的解決方案,這避免了複製到臨時。

如前所述,問題是,相對路徑不從兩個不同的地方工作:

1. ProjectFolder\ServiceDefinition.csdef 
2. ProjectFolder\bin\Debug\ServiceDefinition.csdef 

所以我搬到ServiceDefinition.csdef中的源位置上下兩個文件夾級別,從而使相對相同路徑將在兩種情況下工作:

1. ProjectFolder\Service\Definition\ServiceDefinition.csdef 
2. ProjectFolder\bin\Debug\ServiceDefinition.csdef 

要做到這一點,我編輯的項目文件(右鍵單擊「編輯項目文件」),並改變了:

<ServiceDefinition Include="ServiceDefinition.csdef" /> 

到:

<ServiceDefinition Include="Service\Definition\ServiceDefinition.csdef" /> 

我創建了這兩個子文件夾在Windows資源管理器和移動文件到新的位置。然後我重新加載了這個項目。

我注意到,Visual Studio中自動添加這兩條線對我來說:

<Folder Include="Service\" /> 
<Folder Include="Service\Definition\" /> 

在我ServiceDefinition.csdef中的文件,我指的是源目錄中的三個文件夾上升到解決方案文件夾,然後導航從那裏:

<SourceDirectory path="..\..\..\MySourceProject\MySourceFolder" />