2010-11-28 33 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