XSL 转换期间出错:'document()' 函数的执行被禁止

error during XSL Transformation : Execution of the 'document()' function was prohibited

调用 XslTransformation 任务时,我在 msbuild v14/vs2015 中遇到问题。

错误 MSB3703:无法执行转换。禁止执行 'document()' 函数。使用 XsltSettings.EnableDocumentFunction 属性 启用它。

是的,我在 xslt 转换中调用了 xsl document() 函数..
当 运行 来自 vs2013 和以前版本的 msbuild 的相同任务时,我没有任何错误..
我在这里没有使用任何 C# 代码,所以我无法设置 EnableDocumentFunction 属性 并且我不想删除我的 document() 调用。
我该如何解决这个问题?

UseTrustedSettings参数添加到XslTransformation任务:
<XslTransformation ... UseTrustedSettings="true" />

为了能够使用以前版本的VS打开项目,可以使用以下条件
<XslTransformation ... UseTrustedSettings="true" Condition="$(MSBuildToolsVersion) &gt; 13" /> <XslTransformation ... Condition="$(MSBuildToolsVersion) &lt;= 13" />

可以找到更多详细信息 here

基于上面接受的答案,我编写了以下 LINQPad(VB 语句)脚本来对指定项目文件夹下的所有 wixproj 文件进行适当的调整,以便它们可以用 msbuild:

的旧版本和新版本编译
Const projectsFolder As String = "C:\Projects"

Dim projects = IO.Directory.EnumerateFiles(projectsFolder, "*.wixproj", SearchOption.AllDirectories)
Dim rXform As New System.Text.RegularExpressions.RegEx("(?m)(^.*\<XslTransformation .*(?=\s\/\>))")
Dim replaceText = " UseTrustedSettings=""true"" Condition=""$(MsBuildToolsVersion) &gt; 13"" />" & vbCrLf & " Condition=""$(MSBuildToolsVersion) &lt;= 13"""

For Each f In projects
    Dim contents = IO.File.ReadAllText(f)
    If Not contents.Contains("UseTrustedSettings=""true""") Then
        Dim replaced = rXform.Replace(contents, replaceText)
        If Not String.Equals(contents, replaced) Then
            IO.File.WriteAllText(f, replaced)
            String.Format("File touched: {0}", f).Dump()
        End If
    End If
Next

我在这里分享它,因为它可能对其他人有用,但请先进行备份,或者如果您使用的是存储库,请在提交前检查更改。这个脚本应该是幂等的,因为如果 运行 两次,它不会改变同一个文件两次。