【问题标题】:Referencing a .NET 4.6 project from ASP.NET 5 causes build error从 ASP.NET 5 引用 .NET 4.6 项目会导致生成错误
【发布时间】:2015-11-22 18:11:25
【问题描述】:

在我的 ASP.NET 5 RC1 项目(仅针对 dnx46)中,我正在尝试添加对针对 .net 4.6 的(经典)类库项目的引用。

我在构建时收到此错误: ...\MSBuild\14.0\bin\Microsoft.Common.CurrentVersion.targets(1819,5):警告 MSB3274:无法解析主要引用“...\ClassLibrary1.dll”,因为它是针对“. NETFramework,Version=v4.6" 框架。这是比当前目标框架“.NETFramework,Version=v4.5.1”更高的版本。

为什么会这样?我的 ASP.NET 5 项目不是针对 4.5.1。根据 project.json 文件,它只针对 dnx46。我在任何地方都找不到任何提及 .net 4.5.1 的内容。

这是我的 WebApplication 项目的 project.json:

{
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final"
  },

  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
  },

  "frameworks": {
    "dnx46": {
      "dependencies": {
        "ClassLibrary1": "1.0.0-*"
      }
    },
  },

  "exclude": [
    "wwwroot",
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ]
}

这是“包装”过程为我的 ClassLibrary 项目创建的 project.json:

{
  "version": "1.0.0-*",
  "frameworks": {
    "net46": {
      "wrappedProject": "../../ClassLibrary1/ClassLibrary1.csproj",
      "bin": {
        "assembly": "../../ClassLibrary1/obj/{configuration}/ClassLibrary1.dll",
        "pdb": "../../ClassLibrary1/obj/{configuration}/ClassLibrary1.pdb"
      }
    }
  }
}

【问题讨论】:

  • 可以分享两个项目的project.json文件吗?
  • 当然,我更新了问题以包含 project.json 文件。
  • 我有同样的警告,4 个月后.. 但它似乎没有错,它的工作原理。

标签: asp.net-core


【解决方案1】:

如果使用 VS 2015 Update 1 构建,警告仍然存在,但 Web 应用运行良好并且可以从 .net4.6 程序集调用方法。

【讨论】:

    【解决方案2】:

    如果您尚未升级实用程序和运行时版本,请尝试升级它。

    • dnvm 升级

    然后从 shell 指向您的 working\project 文件夹,清理缓存并恢复项目包

    • dnu clear-http-cache
    • dnu 恢复

    然后尝试构建它

    • dnu 构建

    【讨论】:

    • 我认为它与dnu无关,似乎是MSBuild问题,在RC1中我仍然有同样的问题。无论如何,我尝试了您的评论,但它仍然显示相同的警告。
    【解决方案3】:

    您可能遇到VS 2015. Setting right target framework for ASP.NET 5 web project。尽管项目针对 4.6 框架,但该问题与针对 4.5.1 的 IIS 有关。

    您的问题是在从 Visual Studio 构建时还是在运行 IIS 时出现的?

    以下内容对我们有用。

    ClassLibraryNet46

    这是一个经典的 .NET Framework 类库,以 .NET 4.6 作为其目标框架。有一个类。

    BowserKingKoopa.cs

    namespace ClassLibraryNet46
    {
        public class BowserKingKoopa
        {
            public static string GetMessage()
            {
                return "Hello to BowserKingKoopa from ClassLibraryNet46!";
            }
        }
    }
    

    WebApplicationNetCore

    这是一个只有 Startup.cs 类的 ASP.NET Core Web 应用程序。我们使用Visual Studio添加对Net46项目的引用(右键,添加引用...)

    Startup.cs

    using Microsoft.AspNet.Builder;
    using Microsoft.AspNet.Hosting;
    using Microsoft.AspNet.Http;
    
    namespace WebApplicationNetCore
    {
        public class Startup
        {
            public void Configure(IApplicationBuilder app)
            {
                app.UseIISPlatformHandler();
    
                app.Run(async (context) =>
                {
                    var message = 
                        ClassLibraryNet46.BowserKingKoopa.GetMessage();
    
                    await context.Response.WriteAsync(message);
                });
            }
    
            public static void Main(string[] args) => 
                WebApplication.Run<Startup>(args);
        }
    }
    

    项目.json

    {
      "version": "1.0.0-*",
      "compilationOptions": {
        "emitEntryPoint": true
      },
    
      "dependencies": {
        "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
        "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final"
      },
    
      "commands": {
        "web": "Microsoft.AspNet.Server.Kestrel"
      },
    
      "frameworks": {
        "dnx46": {
          "dependencies": {
            "ClassLibraryNet46": "1.0.0-*"
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多