【问题标题】:How to add SDK into a UWP project programmatically?如何以编程方式将 SDK 添加到 UWP 项目中?
【发布时间】:2017-05-22 11:10:45
【问题描述】:

我正在为通用 Windows 平台开发项目模板。在 UWP 项目中,我们可以通过 Assemblies、NuGet 和 SDK 三种方式添加引用。要添加程序集,我只需使用

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

我可以使用NuGet.VisualStudio dll 安装 NuGet 包。但是如何以编程方式将 SDK 添加到 UWP 项目中,例如引用和 NuGet 包?

【问题讨论】:

    标签: nuget visual-studio-extensions vsix vs-extensibility visual-studio-templates


    【解决方案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();
    

    更新:

    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);
    

    【讨论】:

    • 谢谢。它按预期工作。但在项目创建后,会显示一个对话框,其中显示“项目已在环境之外修改”。 (截图见here)我怎样才能避免这种情况?请帮忙。
    • 请查看这个帖子:stackoverflow.com/questions/44117270/…,卸载项目->修改csproj文件->重新加载项目。
    • 该线程的解决方案仅适用于插件。它不适用于项目模板。
    • 相同的代码对我不起作用。对话框仍在显示。作为一种解决方法,我已将 sdk 条目添加到 replacementdicationary 中,并将查找字符串添加到模板的项目文件中。它按预期工作。感谢您的帮助。
    • 很高兴知道您解决了问题并提供了解决方案,请创建回复并将其标记为答案,这将对其他有类似问题的社区有所帮助。
    【解决方案2】:

    我已将 sdk 条目添加到如下所示的替换字典中,并将查找字符串作为 $myuwpsdk$ 添加到模板的项目文件中。它按预期工作。这可能是不正确的方法或临时解决方法。但它满足了我的要求。

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

    【讨论】:

      猜你喜欢
      • 2013-08-03
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      • 1970-01-01
      • 2011-02-04
      • 1970-01-01
      相关资源
      最近更新 更多