2009-08-26 3 views
3

솔루션의 속성에서 대상 프레임 워크를 설정하면 해당 프레임 워크 또는 그 이하의 기능 만 사용하도록 해당 응용 프로그램이 제한된다는 생각이 들었습니다. 우리는 누군가가 참조를 추가하고 더 높은 버전의 프레임 워크에서 코드를 사용하기 시작하고 컴파일러가 하나의 비트를 불평하지 않는다는 것을 알았습니다. 이후에이 문제를 방지하고 싶으므로 앞으로 더 높은 버전을 참조하는 것을 발견 할 수있는 방법에 대한 아이디어가있는 사람이 있습니까? 누군가가 목표 위에 코드를 추가하면 빌드를 실패해야합니다..net 프레임 워크의 특정 버전을 적용하는 방법은 무엇입니까?

+0

이 플래그는 라이브러리가 아닌 상위 프레임 워크의 언어 (clr) 기능 만 허용하지 않습니다. – andyp

답변

0

작동하지 않는 이유는 무엇입니까? 새로운 기능을 사용하지 않는 한 "앞으로"호환되는 DLL을 사용할 수 있다고 생각합니다.

+1

개발자가 실수로/무의식적으로 새로운 기능을 사용하지 않기를 바랍니다. – Alex

+0

나는 컴파일러가 당신을 위해 이러한 문제를 잡을 것으로 기대한다. 컴파일러가 아니라면, 단위 테스트는 확실히 그것을 잡을 것입니다. – David

1

.NET 2.0 이상을 대상으로한다고 가정하면 프로젝트 참조에서 System.Core 또는 다른 3.x 어셈블리 (예 : WPF)에 대한 참조가 발견되면 빌드가 실패 할 수 있습니다.

UPDATE

당신은 각 .PROJ 파일 내부 검사를 시작할 수

:

<Reference Include="System.Core"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
</Reference> 
<Reference Include="System.Xml.Linq"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
</Reference> 
<Reference Include="System.Data.DataSetExtensions"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
</Reference> 

이 사용자 지정은 NAnt 작업이 될 수 다음 <ItemGroup> 태그 안에,

<TargetFrameworkVersion>v3.5</TargetFrameworkVersion> 

다음 또는 자신의 파서를 작성하여 이러한 노드를 찾고 빌드를 실패 할 수 있습니다.

+0

그리고 이것을 어떻게 감지 할 수 있습니까? 나는 매니 페스트, proj 파일 등을 보았다. 그리고, 각 dll과 어떤 버전의 전역 목록없이 나는 최선을 결정하는 방법을 알아낼 수 없습니다. 좋은 소식은 VS 2010을 테스트 한 결과이며이를 적용하므로 최상의 옵션은 2010 년을 기다리고 즉시 업그레이드하는 것일 수 있습니다. – Alex

관련 문제