我在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 post和this 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)
答案 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>
节点,它将相应地添加它。