2010-11-28 30 views
0

我有一個行爲異常的web部署項目。我繼承了一個包含大量.pdf文件的App_Data文件夾。某些文件名包含無效字符並且過長。在我的部署項目文件,我包括以下的ItemGroup末:ExcludeFromBuild在VS2010 web部署項目中失敗

... 
    <ItemGroup> 
    <ExcludeFromBuild Include="$(SourceWebPhysicalPath)\**\*.pdf" /> 
    </ItemGroup> 
</Project> 

但是當我建立這個項目我不斷收到以下錯誤:

error : Copying file $([System.IO.Path]::Combine($(_WDPSourceWebPhysicalPath), 
    App_Data\CWM2\393S097 Connection of an Embedded Network to elided's Network v1.pdf)) 
    to obj\Debug\Source\App_Data\CWM2\393S097 Connection of an Embedded Network to 
    elided's Network v1.pdf failed. The path is not of a legal form. 

我已經嘗試添加通配符App_Data文件夾,但它只是不工作。我想這是可以想象的,msbuild無法匹配這些文件排除因爲文件名是無效的。幫幫我?

回答

1

我看到了與我的部署項目類似的錯誤。我相信VS2010 Web部署項目有一個錯誤,可以防止複製包含引號字符的任何文件。

我在這裏提出了連接錯誤:https://connect.microsoft.com/VisualStudio/feedback/details/631995/

我所知道的唯一的解決方法是從文件的名稱中刪除引號字符。

+0

感謝韋斯利(從webdeploymentproject 2008年拍攝)替換XML標記的內容 - 我最終使用PowerShell腳本來處理錯誤的文件名。 – 2010-12-21 22:50:03

1

我找到了解決方法!您可以通過將非工作部分替換爲2008版本中的工作部分來更改文件「C:\ Program Files(x86)\ MSBuild \ Microsoft \ WebDeployment \ v10.0 \ Microsoft.WebDeployment.targets」。要做到這一點,搜索

<Target Name="_CopyBeforeBuild" 

並用以下

<Target Name="_CopyBeforeBuild" Condition=" '$(EnableCopyBeforeBuild)' == 'true' or '@(ExcludeFromBuild)' != '' "> 
    <CreateItem Include="$(SourceWebPhysicalPath)\**\*.*" Exclude="@(ExcludeFromBuild)"> 
     <Output ItemName="_WebFiles" TaskParameter="Include" /> 
    </CreateItem> 

    <RemoveDir Directories="$(CopyBeforeBuildTargetPath)"/> 
    <MakeDir Directories="$(CopyBeforeBuildTargetPath)"/> 
    <Copy SourceFiles="@(_WebFiles)" DestinationFolder="$(CopyBeforeBuildTargetPath)\%(_WebFiles.SubFolder)%(_WebFiles.RecursiveDir)" /> 

    <CreateProperty Value="$(CopyBeforeBuildTargetPath)"> 
     <Output TaskParameter="Value" PropertyName="_AspNetCompilerSourceWebPath" /> 
    </CreateProperty> 
</Target> 
+0

感謝您的更新 - 這不是我曾考慮過的,但看起來很有前途。我想你應該小心重新應用服務包覆蓋文件的變化 - 除非服務包解決了問題:-) – 2011-11-06 22:26:40