首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nuget包生成损坏的web.config文件(assemblyBinding部分)

Nuget包生成损坏的web.config文件(assemblyBinding部分)
EN

Stack Overflow用户
提问于 2017-06-27 04:22:48
回答 2查看 457关注 0票数 0

编辑:已经解决了问题!见下面的答案。

我创建的nuget包有一个奇怪的问题。我已经创建了几个nuget包,以前从未遇到过这个问题,但是现在突然间,当安装新包时,它将产生一个无效的web.config文件。

nuspec文件与其他(正在工作的)项目几乎完全相同。我添加了安装脚本和一些特殊内容,并在元数据部分中设置了依赖项:

代码语言:javascript
复制
<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>Kooco.com Ltd</authors>
    <owners>$author$</owners>
    <description>Server-Project Template for use with the Kooco.Framework</description>
    <releaseNotes>Pre-Alpha Release</releaseNotes>
    <copyright>Copyright 2017</copyright>
    <tags>Maxima Kooco WebProjects</tags>
    <dependencies>
      <dependency id="Newtonsoft.Json" version="10.0" />
      <dependency id="AutoMapper" version="6.0" />
      <dependency id="WebActivatorEx" version="2.2" />
      <dependency id="Kooco.Framework" version="$version$" />
    </dependencies>
    <references>

    </references>
  </metadata>
  <files>
    <file src="install.ps1" target="tools" />
    <file src="NugetOverwriteContents\**\*.*" target="tools\OverwriteContents" />
    <file src="NugetNoOverwriteContents\**\*.*" target="tools\NugetNoOverwriteContents" />
  </files>
</package>

依赖项与其他(工作的)包完全相同。

但是由于某些原因,在安装软件包时,nuget将生成以下web.config部分,这将导致应用程序中的错误,因为没有关闭标记:

代码语言:javascript
复制
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
      <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" /><assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" /><assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /></dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-5.2.0.0" newVersion="5.2.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

在安装nuget软件包之前,它是:

代码语言:javascript
复制
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
      <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" /><assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" /></dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-5.2.0.0" newVersion="5.2.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
      <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
    </dependentAssembly>
  </assemblyBinding>
</runtime>

我不进行自定义配置转换。我有一个安装脚本,但这个脚本不是问题,我也尝试安装没有安装脚本和有同样的问题。

目标项目是一个空的ASP.Net web应用程序,在那里我使用了"WebAPI“和"MVC”激活的“空”模板。

我的nuget包管理器版本是3.5.0.1484。启用自动更新。我正在使用Visual 2015社区版。我的系统是Windows 10。

有人知道是什么导致了这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2017-06-27 09:38:51

有人知道是什么导致了这个问题吗?

我用nuspec文件创建了一个nuget包,但不包括<files>... </files>的部分,然后将其安装到ASP.Net MVC项目中。效果很好。因此,如果没有更详细的信息,我无法直接解决这个问题,我可以为您提供一些疑难解答:

首先,请排除web.config上的人为修改.因为默认的绑定信息应该如下所示:

代码语言:javascript
复制
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.1.0" newVersion="3.0.1.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Optimization" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="1.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

但是在您的web.config中,在包Newtonsoft.Json下复制bindingRedirect

代码语言:javascript
复制
<dependentAssembly>
      <assemblyIdentity name="Newtonsoft.Json" culture="neutral" publicKeyToken="30ad4fe6b2a6aeed" />
      <bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" /><assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" /><assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /><bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" /></dependentAssembly>

您可以创建一个新的空白ASP.Net MVC项目来检查这一点。

其次,我们可以通过web.config或使用(XDT)修改web.config.transform文件

web.config.transform文件包含与web.config文件相同的内容,在安装NuGet包时它将应用于web.config文件。XDT功能更强大,可以对web.config文件进行更复杂的修改,例如插入或删除现有元素。因此,请再次检查您的包中包含的配置转换文件是否带有通配符"*“。您可以尝试排除包中的那些文件,以检查此问题是否仍然存在。

票数 0
EN

Stack Overflow用户

发布于 2017-09-13 04:15:37

我发现了这个问题:问题是,在我的一些项目中,web.config文件将构建操作设置为"Content“,而且似乎会自动从其中生成一个web.config转换。将构建操作更改为"None“解决了问题。

顺便说一下。帮助您使用"NuGet Package“工具,它允许您查看创建的nuget包的内容,然后我看到了自动创建的"web.config.transform”文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44772232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档