[asp.net] 어셈블리 ‘netstandard, Version = 2.0.0.0’에 대한 참조를 추가해야합니다.

이 프로젝트는 .NET Framework 4.6.1을 대상으로하는 ASP.NET MVC 웹앱입니다.

갑자기 (일부 NuGet 패키지가 업그레이드 됨) 런타임 중에 다음 오류가 발생하기 시작했습니다.

CS0012 : ‘System.Object’형식이 참조되지 않은 어셈블리에 정의되어 있습니다. 어셈블리 ‘netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51’에 대한 참조를 추가해야합니다.

내 메인 뷰 Index.cshtml에서 내가 사용하는 라인에서@Html.ActionLink

내 컴퓨터에 .NET Core SDK 2.0 및 .NET Framework 4.7.1이 설치되어 있지만 이에 대한 참조를 포함하고 싶지 않습니다. 이것은 .NET Framework 웹앱 전용이며 설치된 프레임 워크가 4.6.1 인 Windows IIS에서 호스팅되며 서버에 NET Core가 설치되어 있지 않습니다.

그렇다면 왜 참조를 추가하도록 요청 netstandard합니까? 참조하지 않고 netstandard전체 Windows .NET Framework 4.6.1을 수정하려면 어떻게해야 합니까?

잘 작동했던 이전 커밋을 확인했는데 여전히이 오류가 발생합니다. 따라서 업그레이드되는 NuGet 패키지와 관련이 없습니다. 내 로컬 개발 시스템에 뭔가있는 것 같습니다.

앱을 디렉토리에 게시하고 IIS로 실행하면 작동합니다.

.csproj 요점에 링크

packages.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>

VS2017을 사용하여 파일 시스템에 앱을 게시 할 때 출력에 다음 경고가 표시됩니다.

다음 어셈블리에는 대상보다 높은 .NET Framework 버전에 대한 종속성이 있으며 런타임 중에 제대로로드되지 않아 오류가 발생할 수 있습니다 : netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51. 종속성은 System.Transactions, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089입니다. 종속 어셈블리가 대상 프레임 워크에 대해 올바른지 확인하거나 주소를 지정하는 대상 프레임 워크가 종속 어셈블리의 프레임 워크인지 확인해야합니다.

하지만에서 아무것도 찾을 수 없습니다 System.Transactions. 그것을 참조하는 것을 어떻게 검색 할 수 있습니까?



답변

해결책은 GitHub에서이 문제 일 수 있다고 생각합니다 .

다음과 같이 web.config에 netstandard 참조를 추가해보십시오. “

<system.web>
  <compilation debug="true" targetFramework="4.7.1" >
    <assemblies>
      <add assembly="netstandard, Version=2.0.0.0, Culture=neutral,
            PublicKeyToken=cc7b13ffcd2ddd51"/>
    </assemblies>
  </compilation>
  <httpRuntime targetFramework="4.7.1" />

4.6.1을 사용하고 있지만 이전 Framework 버전이 .NET Standard 2.0과 완전히 호환되지 않으므로 .NET 4.7.1을 선택하는 것이 중요합니다.

.NET Standard 라이브러리를 도입했을 때 NUGET 패키지와 참조가 깨지는 데 많은 문제가있었습니다. 고려해야 할 다른 변경 사항은 파일 대신 PackageReferences 로 업그레이드하는 것입니다 package.config.

이 가이드를 참조 하면 업그레이드에 도움 이되는 도구 가 필요할 수도 있습니다 . 그래도 늦은 VS 15.7 버전이 필요합니다.


답변

.csproj 파일을 수동으로 편집하고 아래 참조를 추가하면 저에게 효과적이었습니다.

<Reference Include="netstandard" />

여기에서 제안한 Fahad Alshaya에게 감사합니다 .


답변

이 스레드에서 다른 사람들의 답변을 조합해야했습니다.

  1. NuGet을 통해 NetStandard.Library 설치
  2. .csproj 파일을 수동으로 편집하고 참조를 추가합니다. <Reference Include="netstandard" />
  3. 확장 프로젝트-> VS 솔루션 탐색기에서 참조, ‘netstandard’를 마우스 오른쪽 단추로 클릭하고 속성 페이지를 표시하고 “로컬 복사”를 true로 설정합니다.

답변

나는 이전에 이것을 겪었고 여러 가지 시도를 통해 나를 위해 해결했습니다.

  • bin 폴더가있는 경우 삭제
  • 숨겨진 .vs 폴더 삭제
  • 4.6.1 타겟팅 팩이 설치되어 있는지 확인
  • 마지막 도랑 노력 : System.Runtime에 대한 참조를 추가합니다 (프로젝트를 마우스 오른쪽 버튼으로 클릭-> 추가-> 참조-> System.Runtime 옆에있는 상자를 선택합니다). 위의 방법 중 하나가 대신 해결했다고 생각합니다. 이 일의.

또한 이것이 전체 프레임 워크에서 실행되는 .net 핵심 앱인 경우 프로젝트의 루트에 global.json 파일 을 포함하고 해당 프로젝트에 사용할 SDK를 가리켜 야합니다.

{
  "sdk": {
    "version": "1.0.0-preview2-003121"
  }
}


답변

Bin 및 Obj 폴더 삭제가 저에게 효과적이었습니다.


답변

4.6.1 프레임 워크에서 4.7.2로 업그레이드 한 후이 오류가 발생하기 시작했습니다.

” ‘System.Object’형식은 참조되지 않는 어셈블리에 정의되어 있습니다. ‘netstandard, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = cc7b13ffcd2ddd51’어셈블리에 대한 참조를 추가해야합니다.” 궁극적으로 해결책은 위에서 언급 한 “netstandard”어셈블리 참조를 추가하는 것이 었습니다.

<compilation debug="true" targetFramework="4.7.1" >
    <assemblies>
      <add assembly="netstandard, Version=2.0.0.0, Culture=neutral,
            PublicKeyToken=cc7b13ffcd2ddd51"/>
    </assemblies>
  </compilation>


답변

이것은 오래된 스레드이지만 오늘 같은 문제가 발생했습니다. 지난주에 일부 NuGet 패키지를 업데이트했으며 MVC 웹 사이트가 테스트 서버에 게시했을 때 개발 컴퓨터에서 정상적으로 작동했지만 실패했습니다.

나는 수많은 게시물을 읽었지만 아무것도 작동하지 않았습니다. 마침내 내 로컬 저장소의 DLL을 테스트 서버의 DLL과 비교 한 결과 netstandard.dll이 업로드되지 않았 음을 발견했습니다. 일단 업로드 된 웹 사이트가 정상적으로 작동했지만 VS2017 웹 배포가 DLL을 게시하지 않은 이유를 모르겠습니다.

위의 어느 것도 당신을 위해 작동하지 않는 경우를 대비하여 조심해야 할 것입니다.