2010-08-06 2 views
1

3.5에서 4.0으로 업그레이드 된 VB.NET 솔루션이 있습니다. 클래스 중 하나에 비공개 필드가 있습니다.클래스가 자체 필드에 액세스 할 때 FieldAccessException (.NET 프로젝트가 3.5에서 4.0으로 업그레이드 됨)

Private _Projection As ICalculatedPath 

런타임시 해당 필드를 포함하는 클래스가 해당 필드에 액세스 할 때마다 FieldAccessException이 발생합니다. 해당 필드에 액세스 얻을 일이 처음 방법에서 널 체크, 그리고 내가 무작위로 위의 라인을 변화 시도 것들 중 하나는 :

Private _Projection As ICalculatedPath = Nothing 

나는이 작업을 수행 할 때, 그에 사용하여 FieldAccessException를 얻을 수 클래스의 .ctor()가 해당 필드에 액세스 할 수 없다는 것을 나타내는 줄. 또한 필드를 보호하고 공개하고 솔루션을 정리하고 다시 작성하며 VS를 다시 시작하여 솔루션의 모든 프로젝트에서 x86 및 .NET 4.0을 대상으로하고 다른 비 시각적 인 방법으로이 예외를 없애고 무용지물로 만들려고했습니다. . 물론이 코드는 업그레이드 이전에 잘 작동했습니다.

업그레이드 프로세스에 문제가있을 수 있습니까? 나는 무엇을 여기에서 생각해야하는지 정말로 모른다.

답변

3

.NET 4.0에서 Code Access Security의 사용이 중단 된 것처럼 보입니다. 이 클래스를 포함하는 어셈블리에는 AssemblyInfo.vb에 다음 내용이 있습니다.

<Assembly: AllowPartiallyTrustedCallers()> 

해당 특성을 제거하면 FieldAccessException이 발생하지 않습니다. 정확히 이것이 왜 그런지, 나도 몰라,하지만 예외를 없애 버린다. 누군가가 더 자세한 정보를 입력 할 수 있다면 나는 미래에이 질문을하는 사람에게 유용 할 것이라고 확신합니다.

중첩 된 개체 데이터 원본과 함께 MS ReportViewer 컨트롤을 사용했기 때문에이 특성이 필요했습니다. 우리는 더 이상 그것을 필요로하지 않으므로, 그것을 없애는 것이 문제가되지 않는 것은 행복한 우연의 일치입니다.

+0

고마워요! 오히려 까다로운 오류였습니다. – Dmitry

0

동일한 클래스의 속성을 Projection이라고 명시 적으로 선언 했습니까? VB.NET은 선언 한 모든 자동 속성에 대한 선행 밑줄이있는 비공개 필드를 자동으로 만듭니다. 따라서 Public Property Project As ICalculatedPath이 getters 및 setters없이 선언 된 경우 (VB.NET 4.0에 도입 된 자동 속성이라고 함) VB.NET은 자동으로 _Projection을 생성합니다. 이 경우 프로그램은 동일한 범위에서 동일한 선언을 갖는 두 개의 변수를 가지게되어 문제가됩니다.

+0

Projection이라는 속성이 있지만 자동 구현되지 않습니다 (3.5에서 작동하는 표준 읽기 전용 속성). –

관련 문제