如何避免在 web.config 中添加程序集版本?

Posted

技术标签:

【中文标题】如何避免在 web.config 中添加程序集版本?【英文标题】:How Can I Avoid Adding Assembly Version In web.config? 【发布时间】:2012-11-14 02:01:40 【问题描述】:

我正在使用从BehaviorExtensionElement 扩展的类向我的 WCF 服务添加自定义端点行为以对其进行初始化。在我的web.config 中,我添加以下内容来注册行为扩展:

<system.serviceModel>
    <services>
      <service name="Service.MyService">
        <endpoint address=""
                  behaviorConfiguration="endpointBehavior"
                  binding="basicHttpBinding"
                  contract="Contracts.IMyService"/>
      </service>
    </services>

    <behaviors>
      <endpointBehaviors>
        <behavior name="endpointBehavior">
          <logBehavior />
        </behavior>
      </endpointBehaviors>
    </behaviors>

    <extensions>
      <behaviorExtensions>
        <add name="logBehavior"
             type="MyNamespace.MyBehaviorExtensionElement, MyAssembly, Version=0.0.0.1, Culture=neutral, PublicKeyToken=null" />
      </behaviorExtensions>
    </extensions>
</system.serviceModel>

这绝对没问题,但我必须指定程序集的版本才能加载它。如果我将程序集引用更改为仅 MyNamespace.MyBehaviorExtensionElement, MyAssembly 而没有版本/文化/令牌,则服务无法启动并出现错误:

描述:处理此请求所需的配置文件时出错。请查看下面的具体错误详细信息并适当地修改您的配置文件。

解析器错误消息:为 system.serviceModel/behaviors 创建配置节处理程序时出错:无法将扩展元素“logBehavior”添加到此元素。验证扩展是否已在 system.serviceModel/extensions/behaviorExtensions 的扩展集合中注册。 参数名称:元素

作为我的构建过程的一部分,我的程序集版本的最后部分会经常更改。每次构建版本增加(可能是数百次)时,如何避免使用新版本号更新web.config

【问题讨论】:

复制:***.com/questions/2518425/… 【参考方案1】:

我认为在 .net 4 或更高版本中已经取消了对完全指定的类名的限制。你试过了吗:

  <behaviorExtensions>
     <add name="logBehavior"
         type="MyNamespace.MyBehaviorExtensionElement, MyAssembly" />
  </behaviorExtensions>

我可能错了!

【讨论】:

我尝试删除我的答案中的版本/语言/令牌,但这不起作用。我正在使用 .Net 3.5 SP1,无法升级到 .Net 4。 抱歉,刚刚对问题进行了快速扫描。我认为在 3.5 中是不可能的 @AdamRodger - 你回答了你自己的问题。由于您使用的 .NET Framework 版本,您仅限于此行为。

以上是关于如何避免在 web.config 中添加程序集版本?的主要内容,如果未能解决你的问题,请参考以下文章

asp.net Web.config中assembly注册程序集的目的

从web.config中删除程序集

如何将 app.config 文件添加到项目中

C# 依赖同一个强签名程序集的不同版本

.Net MVC 提示未能加载文件或程序集

带有 Razor 的 MvcContrib FluentHtml?