在VS2010 Web部署项目中ExcludeFromBuild失败

时间:2010-11-28 22:15:39

标签: msbuild web-deployment-project

我有一个行为不端的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无法匹配那些文件以排除,因为文件名无效。帮助

2 个答案:

答案 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>