3

Visual Studio에서 프로젝트에 T4 템플릿 파일 (tt 및 ttinclude 템플릿) 구조를 추가합니다. 프로그래밍 방식으로 프로젝트에 사용자 지정 도구가없는 템플릿 파일 추가

는 이러한 템플릿을 위해 우리는 우리의 사용자 지정 변환 및 처리를 사용하고 우리는 기본적으로 TextTemplatingFileGenerator로 설정되어 TT 파일의 사용자 정의 도구 설정을 원하지 않습니다.

우리는 다음과 같은 코드를 사용하고 있음을 달성하기 위해 :

... // logic for the files creation 
ProjectItem addedItem = this.project.ProjectItems.AddFromFile(fileFullPath); 
addedItem.Properties.Item("CustomTool").Value = string.Empty; 

문제는 파일이 프로젝트에 추가 될 때 코드 생성이 기본 사용자 지정 도구에 의한 우리는 제거 후에도된다는 것이다 tt 파일의 속성에서 변환으로 인한 오류는 여전히 오류 목록 (시각적 인 결함과 비슷한 것)에 있습니다.

파일을 저장하거나 다른 파일로 이동하거나 프로젝트를 빌드하자마자 사라집니다. 그러나 사용자가 이러한 오류를보고 제거하기 위해 추가 조치를 취하는 것을 원하지 않습니다.

우리는

DTE2 dte2 = (DTE2)this.project.DTE; 
dte2.ToolWindows.TaskList; 

같은 DTE 및 DTE2 클래스를 사용하여 오류 모음에 액세스하거나

var provider = new ErrorListProvider(this.ServiceProvider); 
var tasks = provider.Tasks; 

로 ErrorListProvider 제공 업체에서 그들을 점점하려하지만, 작업 목록은 이러한 오류를 포함하지 않습니다 - 수도 그 이유는 그것이 변환 오류가 아니라 컴파일 오류 때문입니다.

더 이상한 것은 DTE.Events.TaskListEvents.TaskAdded 이벤트가 각각의 변환 오류에 대해 실행 중이지만 TaskList에서 찾을 수 없다는 것입니다. 또한 TaskAdded 이벤트에서 가져온 오류에 대해 Delete() 메서드를 호출하면 오류 목록에서 오류가 제거되지 않습니다.

프로그래밍 방식으로 파일을 탐색하거나 tamplate를 저장하려고했지만 수동으로 수행 할 때처럼 오류 목록을 새로 고치지 않았습니다.

오류 목록을 새로 고치거나 템플릿을 프로젝트에 추가 할 때 Visual Studio에서 사용자 지정 도구 설정을 추가하지 않도록 할 수 있습니까?

P. 우리는 클라이언트의 프로젝트 빌드를 강요하고 싶지 않습니다 (오류는 제거하지만 우리에게는 해당되지 않습니다).

답변

1

오류를 제거하기위한 더러운 해결 방법을 발견했습니다.

TextTemplatingFileGenerator에 대해 유효한 기본 템플릿 콘텐츠 (아래에있는 템플릿 파일)를 생성하며 초기 코드 생성으로 오류가 발생하지 않습니다.

<#@ template debug="true" hostSpecific="true" #> 
<#@ output extension=".cs" #> 
<#@ Assembly Name="System.Core" #> 
<#@ Assembly Name="System.Windows.Forms" #> 
<#@ import namespace="System" #> 
<# 
    // This is a temporary content valid for the TextTemplatingFileGenerator. 
#> 

그런 다음 사용자 지정 도구 설정을 제거한 후 우리는 진짜와 컨텐츠를 교체하고 모든 파일이 프로젝트에 이미 있기 때문에 예상과 사용자 지정 도구없이 다른 변형이없는만큼 노력하고 있습니다.

최상의 해결책은 아니지만 더 잘 찾을 수 없었습니다. 이게 도움이 되길 바란다.