代码之家  ›  专栏  ›  技术社区  ›  live2

项目模板DTE Visual Studio 2017 nuget

  •  0
  • live2  · 技术社区  · 9 年前

    var componentModel = (IComponentModel)Package.GetGlobalService(typeof(SComponentModel));
    //componentModel is always null
    

    我已经安装了这个nuget包

    • 努吉。VisualStudio 4.0.0

    并添加以下框架参考

    • Microsoft.VisualStudio.Shell.15.0 15.0.0

    http://tylerhughes.info/archive/2015/05/06/installing-a-nuget-package-programmatically/

    选项2(添加自己的包。config)

    我也尝试过创建包。配置xml,但我没有引用这个包,必须编辑csproj。。。

    public string GetPackagesConfig()
    {
        var sb = new StringBuilder();
        sb.AppendLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
        sb.AppendLine("<packages>");
        sb.AppendLine("<package id=\"log4net\" version=\"2.0.8\" targetFramework=\"net461\" />");
        sb.AppendLine("</packages>");
    
        return sb.ToString();
        //Add file to project
    }
    

    var type = Type.GetTypeFromProgID("VisualStudio.DTE.15.0");
    var obj = Activator.CreateInstance(type, true);
    this._applicationObject = (DTE2)obj;
    

    public bool InstallNuGetPackage(EnvDTE.Project project, string package)
    {
        bool installedPkg = true;
        try
        {
            var componentModel = (IComponentModel)Package.GetGlobalService(typeof(SComponentModel));
    
            IVsPackageInstallerServices installerServices = componentModel.GetService<IVsPackageInstallerServices>();
            if (!installerServices.IsPackageInstalled(project, package))
            {
                var installer = componentModel.GetService<IVsPackageInstaller>();
                installer.InstallPackage(null, project, package, (System.Version)null, false);
            }
        }
        catch (Exception ex)
        {
            installedPkg = false;
        }
        return installedPkg;
    }
    

    private void CreateProject(string projectSubFolder, string projectName)
    {
        Solution2 solution2;
        string solutionFileFullName;
        string solutionFolderFullName;
        string projectFolderFullName;
    
        try
        {
            solution2 = (Solution2)_applicationObject.Solution;
    
            // Get the full name of the solution file
            solutionFileFullName = solution2.FileName;
    
            // Get the full name of the solution folder
            solutionFolderFullName = Path.GetDirectoryName(solutionFileFullName);
    
            // Compose the full name of the project folder
            projectFolderFullName = Path.Combine(solutionFolderFullName, projectSubFolder);
            if (!(projectFolderFullName.EndsWith("\\")))
            {
                projectFolderFullName += "\\";
            }
    
            var programfiles = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86);
            var template = @"Microsoft Visual Studio\2017\Community\Common7\IDE\ProjectTemplates\CSharp\Windows\1033\ClassLibrary\csClassLibrary.vstemplate";
            var projectTemplateFileName = Path.Combine(programfiles, template);
    
            // Add the project
            solution2.AddFromTemplate(projectTemplateFileName, projectFolderFullName, projectName, false);
    
            //Save
            _applicationObject.Solution.SaveAs(_solutionFullFileName);
    
        }
        catch (Exception exception)
        {
            Log.Error(nameof(CreateProject), exception);
        }
    }
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   Tino Hager    9 年前

    在本例中,您可以打开包管理器控制台窗口并发送安装包命令。

    var packageManagerConsoleGuid = "{0AD07096-BBA9-4900-A651-0598D26F6D24}";
    var window = this._visualStudioInstance.Windows.Item(packageManagerConsoleGuid);
    window.Activate();
    
    var commandName = "View.PackageManagerConsole";
    var nugetCommand = "install-package log4net -ProjectName DemoProject";
    
    this._visualStudioInstance.ExecuteCommand(commandName, nugetCommand);
    

    Nager.TemplateBuilder

    本例使用两个nuget软件包创建一个Windows桌面应用程序

    //Configure Project
    var demoProject = new ProjectInfo($"DemoProject", ProjectTemplate.WindowsClassicDesktopWindowsFormsApp);
    demoProject.NugetPackages = new List<string> { "System.ServiceModel.NetTcp", "System.Runtime.Serialization.Xml" };
    
    //Configure Solution
    var folder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    var solutionInfo = new SolutionInfo("Test", folder);
    solutionInfo.ProjectInfos.Add(demoProject);
    
    //Start building machine
    var buildingMachine = new SolutionBuildingMachine();
    buildingMachine.Build(solutionInfo);
    buildingMachine.Dispose();
    
    推荐文章