我有一个行为不端的Web部署项目。我继承了一个包含大量 .pdf 文件的App_Data文件夹。某些文件名包含无效字符且过长。在我的部署项目文件中,我在最后包含以下 ItemGroup :
...
<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无法匹配那些文件以排除,因为文件名无效。帮助
答案 0 :(得分:1)
我在部署项目中遇到过类似的错误。我相信VS2010 Web部署项目有一个错误,可以防止复制任何包含引号字符的文件。
我在此处提交了一个连接错误:https://connect.microsoft.com/VisualStudio/feedback/details/631995/
我知道的唯一解决方法是从文件名中删除引号字符。
答案 1 :(得分:1)
我找到了解决方法!您可以通过将非工作部件替换为2008版本中的工作部件来更改文件“C:\ Program Files(x86)\ MSBuild \ Microsoft \ WebDeployment \ v10.0 \ Microsoft.WebDeployment.targets”。为此,请搜索
<Target Name="_CopyBeforeBuild"
并使用以下内容替换xml标记中的内容(取自webdeploymentproject 2008)
<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>