Dự án là một Ứng dụng Web ASP.NET MVC nhắm mục tiêu .NET Framework 4.6.1.
Đột nhiên (một số gói NuGet đã được nâng cấp), tôi bắt đầu gặp lỗi sau trong thời gian chạy:
CS0012: Loại 'System.Object' được xác định trong một hợp ngữ không được tham chiếu. Bạn phải thêm tham chiếu đến assembly 'netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51'.
Theo quan điểm chính của tôi Index.cshtml
, trong một dòng mà tôi sử dụng@Html.ActionLink
Tôi đã cài đặt .NET Core SDK 2.0 và .NET Framework 4.7.1 trong máy của mình nhưng tôi không muốn bao gồm tham chiếu đến nó. Đây chỉ là một ứng dụng web .NET Framework, nó được lưu trữ trên Windows IIS trong đó khung được cài đặt là 4.6.1, không có NET Core nào được cài đặt trong máy chủ.
Vậy tại sao nó lại yêu cầu thêm tham chiếu vào netstandard
? Làm cách nào để khắc phục sự cố mà không cần tham chiếu netstandard
đến Windows .NET Framework 4.6.1 đầy đủ?
Tôi đã kiểm tra một cam kết trước đó hoạt động tốt và tôi vẫn gặp lỗi này. Vì vậy, nó không liên quan đến các gói NuGet đang được nâng cấp. Có vẻ là thứ gì đó trên máy dev cục bộ của tôi.
Nếu một ứng dụng xuất bản vào một thư mục và chạy nó với IIS thì nó sẽ hoạt động.
package.config
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Antlr" version="3.5.0.2" targetFramework="net46" />
<package id="BundleTransformer.Core" version="1.9.69" targetFramework="net46" />
<package id="BundleTransformer.Handlebars" version="1.9.73" targetFramework="net46" />
<package id="BundleTransformer.Less" version="1.9.69" targetFramework="net46" />
<package id="BundleTransformer.Yui" version="1.9.52" targetFramework="net46" />
<package id="Dapper" version="1.42" targetFramework="net46" />
<package id="EcmaScript.Net" version="1.0.1.0" targetFramework="net46" />
<package id="EntityFramework" version="6.0.0" targetFramework="net46" />
<package id="Glimpse" version="1.8.6" targetFramework="net46" />
<package id="Glimpse.AspNet" version="1.9.2" targetFramework="net46" />
<package id="Glimpse.Mvc5" version="1.5.3" targetFramework="net46" />
<package id="JavaScriptEngineSwitcher.Core" version="1.2.4" targetFramework="net46" />
<package id="JavaScriptEngineSwitcher.V8" version="1.3.0" targetFramework="net46" />
<package id="jQuery" version="2.1.3" targetFramework="net46" />
<package id="jQuery.Validation" version="1.13.1" targetFramework="net46" />
<package id="LowercaseDashedRoute" version="1.0.14" targetFramework="net46" />
<package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.Razor" version="3.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net46" />
<package id="Microsoft.AspNet.WebPages" version="3.2.3" targetFramework="net46" />
<package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.3" targetFramework="net46" />
<package id="Microsoft.Owin" version="3.0.1" targetFramework="net46" />
<package id="Microsoft.Owin.Host.SystemWeb" version="3.0.1" targetFramework="net46" />
<package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework="net46" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
<package id="Moment.js" version="2.10.2" targetFramework="net46" />
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net46" />
<package id="NWebsec" version="5.1.1" targetFramework="net46" />
<package id="NWebsec.Core" version="2.1.0" targetFramework="net46" />
<package id="NWebsec.Mvc" version="5.1.1" targetFramework="net46" />
<package id="Owin" version="1.0" targetFramework="net46" />
<package id="Respond" version="1.4.2" targetFramework="net46" />
<package id="Sendgrid" version="6.3.0" targetFramework="net46" />
<package id="SendGrid.SmtpApi" version="1.3.1" targetFramework="net46" />
<package id="Serilog" version="2.6.0" targetFramework="net46" />
<package id="Serilog.Enrichers.Environment" version="2.1.2" targetFramework="net46" />
<package id="Serilog.Sinks.File" version="3.2.0" targetFramework="net46" />
<package id="Serilog.Sinks.RollingFile" version="3.3.0" targetFramework="net46" />
<package id="Serilog.Sinks.Sentry" version="2.1.4" targetFramework="net46" />
<package id="SerilogWeb.Classic" version="2.1.17" targetFramework="net46" />
<package id="SharpRaven" version="2.2.0" targetFramework="net46" />
<package id="System.Data.SQLite" version="1.0.108.0" targetFramework="net46" />
<package id="System.Data.SQLite.Core" version="1.0.108.0" targetFramework="net46" />
<package id="System.Data.SQLite.EF6" version="1.0.108.0" targetFramework="net46" />
<package id="System.Data.SQLite.Linq" version="1.0.108.0" targetFramework="net46" />
<package id="Twitter.Bootstrap.Less" version="3.3.4" targetFramework="net46" />
<package id="WebActivatorEx" version="2.0.6" targetFramework="net46" />
<package id="WebGrease" version="1.6.0" targetFramework="net46" />
<package id="YUICompressor.NET" version="2.7.0.0" targetFramework="net46" />
</packages>
Khi xuất bản ứng dụng bằng VS2017 lên hệ thống tệp, tôi nhận được cảnh báo sau trong đầu ra:
Hợp ngữ sau có phụ thuộc vào phiên bản .NET Framework cao hơn mục tiêu và có thể không tải chính xác trong thời gian chạy gây ra lỗi: netstandard, Phiên bản = 2.0.0.0, Văn hóa = trung lập, PublicKeyToken = cc7b13ffcd2ddd51. Các thành phần phụ thuộc là: System.Transactions, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089. Bạn nên đảm bảo rằng hợp ngữ phụ thuộc là chính xác cho khung mục tiêu hoặc đảm bảo rằng khung mục tiêu bạn đang giải quyết là của hợp ngữ phụ thuộc.
Nhưng tôi không thể tìm thấy bất cứ điều gì trên System.Transactions
. Làm cách nào để tôi có thể tìm kiếm những gì liên quan đến nó?
System.Data.SQLite.Core
gói dựa trên NET Core (hoặc NET Standard, tôi đã không đi tìm kiếm các nguồn hoặc tài liệu). Xem thông báo lỗi ở cuối tệp dự án của bạn.
packages\System.Data.SQLite.Core.1.0.108.0\lib
thư mục và nó chứa một thư mục cho từng phiên bản .NET Framework, bao gồm 4.6 là những gì tôi đang sử dụng. Tôi không nghĩ đó là vấn đề ở đây.