2011-04-13 73 views
1

我創建了一個MSBuild.xml文件來自動化我們的ASP.NET項目構建。它構建項目,發佈它,將其壓縮並將zip複製到網絡共享中。如果我以前已經登錄到網絡文件夾,這一切都可以正常工作。在我訪問網絡共享後,用戶名和密碼將被記住,直到我退出我的機器。如果我以前沒有登錄過,當運行構建文件時出現「失敗:未知用戶名或密碼錯誤」錯誤。無論我以前是否訪問過網絡共享,我都希望構建可以隨時工作。如何將文件複製到使用MSBuild需要密碼的網絡共享?

當前我正在使用複製任務將zip文件複製到網絡共享。我已經檢查了複製任務文檔,並且看不到任何包含憑據的方式。那麼,如何將文件複製到通過所需用戶名和密碼的網絡共享?

以下是我正在使用的複製任務的示例。所有屬性都在MSBuild.xml文件的頂部定義:

<Target Name="CopyToServer"> 
    <Copy SourceFiles="$(ReleaseFolder)\$(ZipFileName).zip" DestinationFolder="$(WebServerRoot)" /> 
</Target> 

回答

1

我找到了一個解決方案。我並不完全滿意,但它會這樣做,直到我找到更好的解決方案。

如果從批處理文件運行MSBuild命令,則可以使用runas命令以具有訪問網絡共享所需權限的用戶身份運行MSBuild。

E.g.

runas /user:someWindowsUser "C:\PathToBatchFile" 
0

我會reccoment建立專門賬戶,讓我們說建設者,並給予讀取遠程計算機上該帳戶份額/寫訪問。

或者您可以在計算機上調用腳本啓動打開會話。請參閱淨使用/?

5

我有同樣的問題。但我不想在每次使用RunAs部署應用程序時輸入密碼。 相反,我使用Copy任務通過Exec通過net use包裹:

<Target Name="CopyOutput"> 
    <ItemGroup> 
     <PackagedFiles Include="$(ProjectName)\obj\$(Configuration)\Package\PackageTmp\**\*.*"/> 
    </ItemGroup> 
    <Exec Command="net use $(DestPath) /user:$(DestLogin) $(DestPass)" ContinueOnError="false"/> 
    <Copy SourceFiles="@(PackagedFiles)" 
      DestinationFiles="@(PackagedFiles->'$(DestPath)\%(RecursiveDir)%(Filename)%(Extension)')" 
      ContinueOnError="true"/> 
    <Exec Command="net use $(DestPath) /delete" /> 
</Target> 

DestPath,DestLogin和DestPass我通過設置環境變量。

感謝菲爾的回答和this one

相關問題