2010-06-30 5 views
0

새로운 테스트 유형을 처리하기 위해 VS 플러그인에서 작업하고 있습니다. 우리가하고 싶은 일 중 하나는 사용자 지정 빌드 작업을 실행하기 위해 테스트 중 하나가 테스트 프로젝트에있을 때 MSBuild 가져 오기를 프로젝트 파일에 추가하는 것입니다.DTE.Project와 함께 msbuild 가져 오기 요소를 추가 할 수 있습니까?

Microsoft.Build.BuildEngine.Project.Imports를 사용하여 가져 오기 요소를 추가 할 수 있지만 BuildEngine 개체를 통해 프로젝트 파일을 저장하면 "Visual Studio 외부에서 파일이 수정되었습니다"라는 경고가 표시됩니다. 새 Imports를 Project.Imports 컬렉션에 추가하면 Visual Studio에서 프로젝트가 더티라고 표시되지 않으므로 VS를 사용하여 파일을 올바르게 정상적으로 저장할 수는 없습니다.

DTE.Project 또는 VSLangProj.Project 개체를 통해 MSBuild 기능의이 부분에 액세스 할 수있는 방법이 있습니까?

감사합니다.

답변

0

난 그 테스트 여부를 실행할지 여부를 .targets 안에 당신이 당신의 .csproj에 고정 가져 오기를 추가하고 결정하는 게 좋을 것 :

귀하의 .csproj

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 
<Import Project="CustomTest.targets" Condition="Exists('CustomTest.targets')" /> 

주를 Condition .targets가 사용 가능한지 확인하십시오.

귀하의 CustomTest.targets

있는 해당하는 조건을 설정하여 실행하는 테스트를 결정.

<Project DefaultTargets="RunTests" xmlns="..."> 
    <ItemGroup> 
     <MyCustomTests Include="Test_A" Condition="Exists('Test_A.cs')" /> 
     <MyCustomTests Include="Test_B" Condition="Exists('Test_B.cs')" /> 
    </ItemGroup> 

    <Target Name="RunTests" Condition="@(MyCustomTests)!=''"> 
     <Message Text="Running Test %(MyCustomTests.Identity)" /> 
    </Target> 
</Project> 

당신은 당신이 당신의 테스트를 실행에 필요한 수있는 몇 가지 메타 데이터와 MyCustomTests 항목을 확장 할 수 :

... 
    <ItemGroup> 
     <MyCustomTests Include="Test_A" Condition="Exists('Test_A.cs')"> 
      <TestType>Boundary</TestType> 
     </MyCustomTests> 
     <MyCustomTests Include="Test_B" Condition="Exists('Test_B.cs')"> 
      <TestType>SQLInjection</TestType> 
     </MyCustomTests> 
    </ItemGroup> 

    ... 
    <Message Text="Running %(MyCustomTests.TestType) Test %(MyCustomTests.Identity)" /> 
    ... 
+0

복잡하게 만드는 문제는 우리가 만들거나 .csproj 파일을 유지하지 않는다는 것입니다; 고객이 사용할 수있는 새로운 테스트 유형의 VS 플러그인을 제공하고 있습니다. 우리는 테스트 중 하나가 포함되어 있지 않으면 고객의 .csproj 파일을 Imports로 압축하지 않으려 고합니다. 그것은 사용할 수있는 해결 방법이 될 수도 있습니다. 와일드 카드로 Exists 조건을 작성할 수 있습니까? 예 : 조건 = "있음 ('*. foo')" – Greg

관련 문제