0

유니버설 윈도우 플랫폼 용 프로젝트 템플릿을 개발 중입니다. UWP 프로젝트에서는 Assemblies, NuGet 및 SDK의 세 가지 방식으로 참조를 추가 할 수 있습니다. 어셈블리를 추가하려면 단순히SDK를 프로그래밍 방식으로 UWP 프로젝트에 추가하는 방법은 무엇입니까?

VSProject.References.Add("MyAssembly.dll")

을 사용 그리고 NuGet.VisualStudio DLL을 사용하여 NuGet 패키지를 설치할 수 있습니다. 하지만 참조 및 NuGet 패키지와 같은 프로그래밍 방식으로 UWP 프로젝트에 SDK를 추가하려면 어떻게해야합니까?

enter image description here

답변

1

당신은 그것을 달성하기 위해 Microsoft.Build.Evaluation.Project의 방법을 addItem를 사용할 수 있습니다. 참조 용 샘플 데모입니다.

DTE2 dte = this.ServiceProvider.GetService(typeof(DTE)) as DTE2; 
EnvDTE.Project currentProject = dte.Solution.Projects.Item(1); 
string projectPath = currentProject.FullName; 
var project = new Microsoft.Build.Evaluation.Project(projectPath); 

var proItem = project.GetItems("SDKReference").FirstOrDefault(); 

project.AddItem("SDKReference", "WindowsTeam, Version=10.0.14393.0", new[] 
         { 
          new KeyValuePair<string, string>("Name", "Windows Team Extensions for the UWP") 
         }); 

project.Save(); 

업데이트 : 나는 다음과 같은 replacementdicationary에 SDK 항목을 추가하고 템플릿의 프로젝트 파일에 $ myuwpsdk $로 찾기 문자열을 추가 한

DTE2 dte = this.ServiceProvider.GetService(typeof(DTE)) as DTE2; 
EnvDTE.Project currentProject = dte.Solution.Projects.Item(1); 
string projectPath = currentProject.FullName; 

Microsoft.Build.Evaluation.ProjectCollection projectCollection = new Microsoft.Build.Evaluation.ProjectCollection(); 

var project = projectCollection.LoadProject(projectPath);    projectCollection.UnloadProject(project); 

project.AddItem("SDKReference", "WindowsTeam, Version=10.0.14393.0", new[] 
         { 
          new KeyValuePair<string, string>("Name", "Windows Team Extensions for the UWP") 
         }); 

project.Save(); 

projectCollection.LoadProject(projectPath); 
+0

감사합니다. 예상대로 작동합니다. 그러나 프로젝트가 생성 된 후 "프로젝트가 환경을 수정했습니다."라는 대화 상자가 나타납니다. (스크린 샷은 [here] (https://ibb.co/mvQZna)를 참조하십시오) 어떻게 이것을 피할 수 있습니까? 도와주세요. –

+0

이 스레드를 확인하십시오 : https://stackoverflow.com/questions/44117270/visual-studio-extension-reload-project, 프로젝트 언로드 -> csproj 파일 수정 -> 프로젝트를 다시로드하십시오. –

+0

해당 스레드의 솔루션은 추가 기능에서만 작동합니다. 그것은 프로젝트 템플릿을 위해 작동하지 않습니다. –

0

. 예상대로 작동합니다. 잘못된 방법 일 수도 있고 임시 해결 방법 일 수도 있습니다. 하지만 그건 내 요구 사항을 완료합니다.

replacementsDictionary["$myuwpsdk$"] = "<ItemGroup><SDKReference Include = \"WindowsTeam, Version=10.0.14393.0\"> <Name>Windows Team Extensions for the UWP</Name> </SDKReference> </ItemGroup>"; 
관련 문제