System.IO.InvalidDataException:将转换应用于' web.config'

时间:2016-09-08 07:54:43

标签: nuget nuget-package

我在a project之外创建了一个自定义程序包,需要在安装时修改目标应用程序的web.config或app.config文件。我已经成功地创建并发布了这个包,虔诚地遵循instructions provided by nuget,,尤其是file and source code transformation

但是当我尝试在项目中安装软件包时,我收到错误:

System.IO.InvalidDataException: An error occurred while applying transformation to 'web.config' in project 'WebTestsNuget' No element in the source document matches '/configuration/system.runtime.caching/memoryCache'

我做了一些搜索,this ASP.NET blog postthis other post建议我删除xmlns文件的configuration节点中的.xdt属性。当我这样做,发布并再次尝试安装时,我收到了错误。

System.IO.InvalidDataException: An error occurred while applying transformation to 'web.config' in project 'WebTestsNuget' 'xdt' is an undeclared prefix.

我找到了一个similar issue reported on Github,但环境是MonoDevelop,它早在2013年。我使用Visual Studio 2015和.NET 4.6.1进行工作,所以它不是&#39 ; t非常乐于助人。

我还能做些什么来解决这个问题? (注意:我使用Nuget 3.4.4.1321)

1 个答案:

答案 0 :(得分:0)

经过无用的搜索和试验后,我终于尝试了旧的(NuGet 2.6之前)这样做的方式:使用.transform文件,它就像魅力一样!

这里how to transform Web.Config using .transform files.使用XDT要简单得多。假设您要转换web.config(或app.config)文件,则创建名为web.config.transform(或app.config.transform)的文件,并将要合并的节点添加到目标中.config档案。

例如,如果您的.transform文件包含以下内容:

<configuration>
    <system.webServer>
       <modules>
            <add name="MyNuModule" type="Sample.MyNuModule" />
       </modules>
    <system.webServer>
</configuration>

,目标配置文件包含以下内容:

<configuration>
    .
    .
    <system.webServer>
       <modules>
            <add name="Module" type="Sample.Module" />
       </modules>
    <system.webServer>
    .
    .
</configuration>

合并后的结果将是

<configuration>
    .
    .
    <system.webServer>
       <modules>
            <add name="MyNuModule" type="Sample.MyNuModule" />
            <add name="Module" type="Sample.Module" />
       </modules>
    <system.webServer>
    .
    .
</configuration>

如果目标文件没有<modules>节点或甚至<system.webServer>节点,它将相应地添加它。