代码之家  ›  专栏  ›  技术社区  ›  David Clarke

ExcludeFromBuild在VS2010 web部署项目中失败

  •  0
  • David Clarke  · 技术社区  · 14 年前

    我有一个行为不端的web部署项目。我继承了一个App_数据文件夹,其中包含大量 .pdf文件 文件夹。有些文件名包含无效字符并且过长。在部署项目文件中,我包括以下内容 项目组 最后:

    ...
      <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 回复  |  直到 14 年前
        1
  •  1
  •   Wesley Smith    14 年前

    我在部署项目中也看到过类似的错误。我相信VS2010 Web部署项目有一个错误,它阻止复制任何包含引号字符的文件。

    我在这里提交了一个连接错误: https://connect.microsoft.com/VisualStudio/feedback/details/631995/

    我知道的唯一解决方法是从文件名中删除引号字符。

        2
  •  1
  •   Yepeekai    13 年前

    我找到了解决办法!您可以更改文件“C:\程序文件(x86)\ MSBuild\Microsoft\WebDeployment\v10.0\Microsoft.WebDeployment.targets”,方法是将非工作部分替换为2008版本中的部分。为此,搜索

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