문제

3.0 프레임 워크에 버그가 있다고 생각하는 문제를 발견했습니다. 확장 방법을 사용하려고하면 다음 오류가 발생합니다.

Missing compiler required member
'System.Runtime.CompilerServices.ExtensionAttribute..ctor'

이 간단한 코드를 사용할 때 :

public static class StringUtils {
    static void TestExtension(this String targetString) {

    }
}

이 컴파일 오류를 제거하는 유일한 방법은 다음 코드를 추가하는 것입니다.

namespace System.Runtime.CompilerServices {
    public class ExtensionAttribute : Attribute { }
}

확장 방법을 사용한 지 몇 달이 지났지만이 작업을 수행 할 필요가 없었습니다. 다른 사람 이이 문제를 발견 한 적이 있습니까?

도움이 되었습니까?

해결책

나는 방금이 문제를 직접 만났다. 제 경우에는 VS 2005/.NET 2.0 프로젝트를 VS 2008/.NET 3.5 프로젝트로 변환했기 때문입니다. 변환 도구는 System.core 2.0에 대한 참조를 유지했으며 System.core 3.5에 대한 참조를 쉽게 변경하는 방법을 찾을 수 없었습니다.

나는 2008 년 vs 2008의 프로젝트를 처음부터 다시 만들어 내고 System.core 3.5에 대한 적절한 참조로 만들어졌습니다.

다른 팁

나는 똑같은 문제가 있습니다. 오류 System.Runtime.CompilerServices.ExtensionAttribute..ctor 다소 비밀스럽고 여러 가지 다른 것을 의미 할 수 있습니다.

그러나 나를 위해 그것은 내가 사용하고 있다는 사실로 요약되었습니다. Newtonsoft.Json.Net. 파일에 대한 참조를 제거했습니다 Newtonsoft.Json.Net20.dll, 그리고 그것을 다시 설명했습니다. 이 후에 내 솔루션이 다시 빌드됩니다.

가장 이상한 점은이 절차 이후의 절차 후에 다른 것이 무엇인지 알아 내려고했을 때, 아무것도 바뀌지 않은 것으로 보인다는 것입니다.

그래서 나는이 참조를 제거하고 다시 언급하는 것이 실제로 무엇을하는지 잘 모르지만 Asker가 언급 한이 특정 오류 메시지로 빌드 문제를 해결합니다.

업데이트 1:

Comenters가 지적한 것처럼 이것을 다시 만나는 사람들에게는 이것을 고치는 올바른 방법은 다음과 같습니다. json.net의 zip을 다운로드하십시오, 그리고 3.5 버전이 있어야하며, json.net을 사용하는 곳마다 3.5 번의 참조 및 기존 참조를 삭제해야합니다. 이전 버전의 .NET을 위해 구축 된 어셈블리를 참조 할 가능성이 높습니다.

업데이트 2:

찰리 꽃 DLL NewTonsoft 라벨은 3.5 인 것으로 실제로 3.5에서 작동하지 않을 것이라고 지적합니다. .NET 2.0에 대한 라벨을 사용해야합니다.

VS에서 프로젝트를 클릭하십시오 (파일 옆, 편집,보기), 속성 선택

그런 다음 응용 프로그램 탭에서 (이미 3.5에 표시됩니다) 대상 프레임 워크를 2.0으로 선택한 다음 컴파일합니다 (오류가 발생합니다). 그런 다음 다시 3.5로 다시 넣은 다음 다시 컴파일하면 오류가 사라집니다.

나는 그것이 Visual Studio에서 작은 결함 일 뿐이라고 생각합니다.

클래스 라이브러리 프로젝트에서 VS 2008에서 VS 2010 베타 2로 업그레이드 한 것과 같은 문제가있었습니다. 업그레이드가 끝날 때까지 프로젝트에 확장 방법을 추가하지 않았으며 동일한 오류가 표시되기 시작했습니다.

프로젝트에 다음 코드가있는 클래스를 추가하면 문제가 해결되었습니다.

namespace System.Runtime.CompilerServices
{
    public class ExtensionAttribute : Attribute { }
}

이 블로그에서 팁을 찾았습니다. http://blog.flexforcefive.com/?p=105

프레임 워크는 확장 방법에 충분하지 않습니다.
그건 마구 자르기 확장 방법을 3.5에 사용하지 않고 작동합니다

어떤 버전의 .NET을 목표로하고 있습니까? ExtensionAttribute 클래스는 System.core.dll (.NET 3.5)에 배송되지만 .NET 2.0/3.0에서 확장 메소드를 사용하려면 직접 검색 할 수 있습니다 (C# 3.0, 분명히). 사실로, Linqbridge 이렇게합니다.

업데이트] 그러나 나는 약간 혼란 스러웠습니다. 오류가 있기 때문입니다. ~해야 한다 참조 :

컴파일러 필수 유형 'System.runtime.compilerservices.extensionAttribute'를 찾을 수 없으므로 오류 1은 새 확장 메소드를 정의 할 수 없습니다. System.core.dll에 대한 참조가 없습니까? [약간의 길

Core 참조는 이러한 증상을 제공합니다.

이 문제는 실제로 System.core의 버전 2에 대한 잘못된 참조로 인해 발생합니다. 이는 일반적으로 이전 버전의 .NET 3.5로 업그레이드 할 때 발생합니다. 이 문제를 겪고있는 웹 사이트 인 경우 아래 단계를 수행하여 해결할 수 있습니다.

1) web.config에서 System.core v3.5에 대한 참조를 추가합니다.

<assemblies>
   <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>

2) web.config에서 구성의 자식으로 다음을 추가하십시오.

<configuration>
   <!--Some other config-->
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
         <assemblyIdentity name="System.Core" publicKeyToken="B77A5C561934E089"/>
         <bindingRedirect oldVersion="2.0.0.0-2.1.0.0" newVersion="3.5.0.0"/>
      </dependentAssembly>
   </assemblyBinding>
</configuration>

지속적인 참조 :

.NET 4.0 프레임 워크에서 지난 2 시간 동안이 동일한 오류 메시지와 싸우고 마침내 Microsoft.csharp DLL에 대한 손상된 참조로 추적했습니다. 정말 실망스럽게 단순한 문제였습니다. 문제가있는 참조를 삭제하고 다음에 위치한 해당 DLL에 대한 "새로운"참조를 추가했습니다.

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Microsoft.CSharp.dll

바라건대 이것은 다른 사람 에게이 오류 메시지에 대한 솔루션을 추적하는 시간을 절약 할 수 있기를 바랍니다.

C# 3.0에 확장이 소개되며 반면에 .NET 3.5에 도입되었으므로 .NET 3.0에서 직접 사용할 수 없습니다.

우연히 웹 사이트 프로젝트입니까? 대상 프레임 워크를 .NET 3.5에서 이전 버전으로 변경 한 다음 .NET 3.5로 다시 변경하십시오.

시도 : 프로젝트, 참조를 추가하고, 목록에서 시스템 코어 3.5.0.0을 찾은 후, 그것을 추가 할 수 있습니다.

VS 프로젝트를 .NET 프레임 워크 3.5 이상으로 타겟팅하십시오. 아마도 아마도 프로젝트를 이전 버전에서 변환했을 것입니다.

기존 .NET 4.0 프로젝트에서 .NET 2.0을 목표로하는 Elmah.Sandbox 버전이있었습니다. 내 프로젝트에 확장 방법을 추가했으며 "Compiler Emered Member"오류 메시지로 빌드가 실패했습니다.

Elmah.sandbox DLL은 Elmahr의 초기 버전의 일부로 포함되었습니다. 이것이 제거되면 모두 다시 만들어졌습니다.

제 경우에는 Microsoft의 Antixsslibrary.dll의 잘못된 NET20 버전이었습니다. Net35로 교체 - 오류가 사라졌습니다.

CSPROJ를 편집하고 해당 참조가 포함되어 있는지 확인하십시오 (간단한 '추가 참조'로 작동하지 않습니다 ...) :

<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top