【问题标题】:Mixing C# and VB.Net in ASP.Net error在 ASP.Net 错误中混合 C# 和 VB.Net
【发布时间】:2017-12-13 15:38:29
【问题描述】:

我正在尝试在我的项目中混合使用 C# 和 VB.Net。但是我遇到了一个错误。我已经将这行代码放在了我的 web.config 中,不幸的是我仍然遇到错误;

<compilation debug="true">
    <codeSubDirectories>
      <add directoryName="VB" />
      <add directoryName="CSharp" />
    </codeSubDirectories>
  </compilation>
  
<system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
                type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
                type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
                warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
</system.codedom>
  

这是我遇到的错误;

我已经查看了这些帖子,herehereherehere。但我仍然遇到错误。如何解决这个问题?谢谢。

编辑 整个 web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.6.1">
      <codeSubDirectories>
        <add directoryName="VB" />
        <add directoryName="CSharp" />
      </codeSubDirectories>
    </compilation>
    <httpRuntime targetFramework="4.6.1"/>
    <httpModules>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"/>
    </httpModules>
  </system.web>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
      <remove name="ApplicationInsightsWebTracking"/>
      <add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"
        preCondition="managedHandler"/>
    </modules>
  </system.webServer>
</configuration>

【问题讨论】:

  • @LeiYang 什么意思?可以举个例子吗?
  • @LeiYang 这不是真的。您可以在同一个项目中混合 C# 和 VB,前提是它仅在 .aspx 文件(不是代码隐藏文件)中,并且您不要在同一个文件中混合两种语言。
  • 您是否尝试过更改或添加 targetFramework?
  • @WillyDavidJr 是的,我也试过了。
  • @LeiYang 不正确。您可以在同一个项目中同时拥有两者。约书亚请发布您的整个 web.config。您在其他很可能与混合语言无关的地方出现错误。

标签: c# asp.net .net asp.net-mvc vb.net


【解决方案1】:

如果您尝试在 .NET 4.x 应用程序池中运行 .NET 3.5 项目,则会出现重复的“system.web.extensions/scripting/scriptResourceHandler”部分定义消息,因为 .NET 4.x 的 machine.config 已经有 scriptResourceHandler 部分(您可以检查 %Windir%\Microsoft.NET\Framework\v4.0.30319\Config\machine.config):

<sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
    <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">

        <!-- this section causing duplicate error for .NET 3.5 projects -->
        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
        ...
    </sectionGroup>
</sectionGroup>

另外,如果您在与 machine.config 相同的目录中检查 web.config,ScriptResourceHandler 已经在那里注册:

<httpHandlers>
    ...

    <!-- this handler is already registered in .NET 4.x default web.config -->
    <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="False"/>

    ...
</httpHandlers>

仅供参考,我发现 .NET 3.5 项目中的 configSections 元素有 scriptResourceHandler 部分,如下所示:

<configSections>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
        <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/>
        <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
          <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere" />
          <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
          <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
          <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication" />
        </sectionGroup>
      </sectionGroup>
   </sectionGroup>
</configSections>

尝试删除上面标有3.5.0.0 版本的configSections 中重复的scriptResourceHandler 部分并尝试重新构建,或者如果您不想升级项目,只需将 IIS 应用程序池更改为使用版本 2.0。

注意:我尝试在 VS 2010 中使用 .NET 3.5 从模板创建一个新的 MVC 项目,发现 C# 和 VB 都可以作为 compiler language="c#;cs;csharp"compiler language="vb;vbs;visualbasic;vbscript" 使用。

参考资料:

MSDN Blog: There is a duplicate scriptResourceHandler section defined

IIS7 deployment - duplicate 'system.web.extensions/scripting/scriptResourceHandler' section

【讨论】:

  • 你说得对,我将 标签翻了一番,如果这就是它的意思,它已经注册了。现在,它正在工作。谢谢!
【解决方案2】:

注意您的错误信息。您可以在同一个项目中运行C#VB

如错误消息所述:

定义了一个重复的“system.web.extensions/scripting/scriptResourceHandler”部分。问题是因为您在 Net 4.0 中运行基于 .net 3.5 的应用程序

您遇到错误的原因是您的完整 web.config,我要求您完整发布,其部分定义已包含在 .NET 4.0 默认 .config 的根 web.config 中(请参阅 %windir% \microsoft.net\framework\v4.0.30319\config\machine.config)

【讨论】:

  • 我不知道它在 中的含义是什么,因为您正在 Net 4.0 中运行基于 .net 3.5 的应用程序,我使用的是 4.6.1框架。 duplicate 是不是说我有重复的标签之类的?
猜你喜欢
  • 1970-01-01
  • 2011-01-21
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多