static async Task Main(string[] args) { // arg0: project file // arg1: proto file var projectPath = @"C:\gh\tp\NewConsole\NewConsole.csproj"; var proto = @"..\greet.proto"; // Initialize helper var msbuild = new MSBuildAPIUtility(NullLogger.Instance); var addCommand = new AddPackageReferenceCommandRunner(); // Add Google.Protobuf await AddDependency(msbuild, addCommand, projectPath, "Google.Protobuf"); // Add Grpc.Server.AspNetCore await AddDependency(msbuild, addCommand, projectPath, "Grpc.Server.AspNetCore"); // Add Grpc.Tools await AddDependency(msbuild, addCommand, projectPath, "Grpc.Tools"); // TODO: Mark as PrivateAsset=All? var project = new Project(projectPath); if (!project.Items.Any(i => i.ItemType == "Protobuf" && i.UnevaluatedInclude == proto)) { project.AddItem("Protobuf", proto, new[] { new KeyValuePair <string, string>("GrpcServices", "Server") }); project.Save(); } foreach (var item in project.Items) { Console.WriteLine(item.ItemType); } }
static async Task <int> AddDependency(MSBuildAPIUtility msbuild, AddPackageReferenceCommandRunner addCommand, string projectPath, string packageName, bool privateAssets = false) { var tempDgFilePath = Path.GetTempFileName(); var packageDependency = new PackageDependency(packageName, VersionRange.Parse("*")); var packageRefArgs = new PackageReferenceArgs(projectPath, packageDependency, NullLogger.Instance) { //Frameworks = CommandLineUtility.SplitAndJoinAcrossMultipleValues(frameworks.Values), //Sources = CommandLineUtility.SplitAndJoinAcrossMultipleValues(sources.Values), //PackageDirectory = packageDirectory.Value(), NoRestore = true, //NoVersion = noVersion, //DgFilePath = tempDgFilePath, //Interactive = interactive.HasValue() }; var retVal = await addCommand.ExecuteCommand(packageRefArgs, msbuild); if (File.Exists(tempDgFilePath)) { File.Delete(tempDgFilePath); } return(retVal); }
public async void AddPkg_FailureUnknownPackage() { // Arrange using (var pathContext = new SimpleTestPathContext()) { var projectA = XPlatTestUtils.CreateProject(projectName, pathContext, "net46; netcoreapp1.0"); var packageX = XPlatTestUtils.CreatePackage(); // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); var packageArgs = XPlatTestUtils.GetPackageReferenceArgs("unknown_package_id", "1.0.0", projectA); var commandRunner = new AddPackageReferenceCommandRunner(); // Act var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; // Assert Assert.Equal(1, result); Assert.True(XPlatTestUtils.ValidateNoReference(projectXmlRoot, packageX.Id)); Assert.True(XPlatTestUtils.ValidateNoReference(projectXmlRoot, "unknown_package_id")); } }
public async void AddPkg_UnconditionalAddWithoutVersion_Success() { // Arrange using (var pathContext = new SimpleTestPathContext()) { var projectA = XPlatTestUtils.CreateProject(projectName, pathContext, "net46"); var packageX = XPlatTestUtils.CreatePackage(); // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); // Since user is not inputing a version, it is converted to a "*" var packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageX.Id, "*", projectA, noVersion: true); var commandRunner = new AddPackageReferenceCommandRunner(); // Act var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; // Assert Assert.Equal(0, result); // Since user did not specify a version, the package reference will contain the resolved version Assert.True(XPlatTestUtils.ValidateReference(projectXmlRoot, packageX.Id, "1.0.0")); } }
public async void AddPkg_FailureIncompatibleFrameworks(string packageFrameworks, string userInputFrameworks) { // Arrange using (var pathContext = new SimpleTestPathContext()) { var projectA = XPlatTestUtils.CreateProject(projectName, pathContext, "net46; netcoreapp1.0"); var packageX = XPlatTestUtils.CreatePackage(frameworkString: packageFrameworks); // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); var packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageX.Id, packageX.Version, projectA, frameworks: userInputFrameworks); var commandRunner = new AddPackageReferenceCommandRunner(); // Act var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; // Assert Assert.Equal(1, result); Assert.True(XPlatTestUtils.ValidateNoReference(projectXmlRoot, packageX.Id)); } }
public async void AddPkg_ConditionalAddWithUserInputFramework_Success(string packageFrameworks, string projectFrameworks, string userInputFrameworks) { // Arrange using (var pathContext = new SimpleTestPathContext()) { var projectA = XPlatTestUtils.CreateProject(projectName, pathContext, "net46; netcoreapp1.0"); var packageX = XPlatTestUtils.CreatePackage(frameworkString: packageFrameworks); // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); var packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageX.Id, packageX.Version, projectA, frameworks: userInputFrameworks); var commandRunner = new AddPackageReferenceCommandRunner(); var commonFramework = XPlatTestUtils.GetCommonFramework(packageFrameworks, projectFrameworks, userInputFrameworks); // Act var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; var itemGroup = XPlatTestUtils.GetItemGroupForFramework(projectXmlRoot, commonFramework); // Assert Assert.Equal(0, result); Assert.NotNull(itemGroup); Assert.True(XPlatTestUtils.ValidateReference(itemGroup, packageX.Id, packageX.Version)); } }
public async void AddPkg_UnconditionalAddWithNoRestore_Success(string packageFrameworks, string projectFrameworks, string userInputVersion) { // Arrange using (var pathContext = new SimpleTestPathContext()) { var projectA = XPlatTestUtils.CreateProject(projectName, pathContext, projectFrameworks); var packageX = XPlatTestUtils.CreatePackage(frameworkString: packageFrameworks); // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); var packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageX.Id, userInputVersion, projectA, noRestore: true); var commandRunner = new AddPackageReferenceCommandRunner(); // Act var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; // If noRestore is set, then we do not perform compatibility check. // The added package reference will be unconditional var itemGroup = XPlatTestUtils.GetItemGroupForAllFrameworks(projectXmlRoot); // Assert Assert.Equal(0, result); Assert.NotNull(itemGroup); Assert.True(XPlatTestUtils.ValidateReference(itemGroup, packageX.Id, userInputVersion)); } }
public async void AddPkg_UnconditionalAddIntoExeProject_Success(string userInputVersion) { // Arrange using (var pathContext = new SimpleTestPathContext()) { var projectA = XPlatTestUtils.CreateProject(ProjectName, pathContext, "net46"); projectA.Properties.Add("OutputType", "exe"); projectA.Save(); var packageX = XPlatTestUtils.CreatePackage(); // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); var packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageX.Id, userInputVersion, projectA); var commandRunner = new AddPackageReferenceCommandRunner(); // Act var result = commandRunner.ExecuteCommand(packageArgs, MsBuild).Result; var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; var itemGroup = XPlatTestUtils.GetItemGroupForAllFrameworks(projectXmlRoot); // Assert Assert.Equal(0, result); Assert.NotNull(itemGroup); Assert.True(XPlatTestUtils.ValidateReference(itemGroup, packageX.Id, userInputVersion)); Assert.True(XPlatTestUtils.ValidateAssetsFile(projectA, packageX.Id)); } }
public async void AddPkg_UnconditionalAddWithDotnetCliToolAndNoRestore_Success(string packageFrameworks, string projectFrameworks, string userInputVersion) { // Arrange using (var pathContext = new SimpleTestPathContext()) { // Generate DotNetCliToolReference Package var packageDotnetCliToolX = XPlatTestUtils.CreatePackage(packageId: "PackageDotnetCliToolX", packageType: PackageType.DotnetCliTool); await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageDotnetCliToolX); // Generate test package var packageY = XPlatTestUtils.CreatePackage(packageId: "PackageY"); await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageY); var projectA = XPlatTestUtils.CreateProject(projectName, pathContext, "net46"); projectA.DotnetCLIToolReferences.Add(packageDotnetCliToolX); projectA.Save(); // Verify that the package reference exists before removing. var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; var itemGroup = XPlatTestUtils.GetItemGroupForAllFrameworks(projectXmlRoot, packageType: PackageType.DotnetCliTool); Assert.NotNull(itemGroup); Assert.True(XPlatTestUtils.ValidateReference(itemGroup, packageDotnetCliToolX.Id, "1.0.0", PackageType.DotnetCliTool)); var packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageY.Id, userInputVersion, projectA, noRestore: true); var commandRunner = new AddPackageReferenceCommandRunner(); // Act var result = commandRunner.ExecuteCommand(packageArgs, MsBuild).Result; projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; itemGroup = XPlatTestUtils.GetItemGroupForAllFrameworks(projectXmlRoot); // Assert Assert.Equal(0, result); Assert.NotNull(itemGroup); Assert.True(XPlatTestUtils.ValidateReference(itemGroup, packageY.Id, userInputVersion)); } }
public async void AddPkg_UnconditionalAddAsUpdate_Succcess(string userInputVersionOld, string userInputVersionNew, bool noVersion) { // Arrange using (var pathContext = new SimpleTestPathContext()) { var projectA = XPlatTestUtils.CreateProject(ProjectName, pathContext, "net46; netcoreapp1.0"); var latestVersion = "1.0.0"; var packages = new SimpleTestPackageContext[] { XPlatTestUtils.CreatePackage(packageVersion: latestVersion), XPlatTestUtils.CreatePackage(packageVersion: "0.0.5"), XPlatTestUtils.CreatePackage(packageVersion: "0.0.9") }; // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packages); var packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packages[0].Id, userInputVersionOld, projectA); var commandRunner = new AddPackageReferenceCommandRunner(); var msBuild = MsBuild; // Create a package ref with the old version var result = commandRunner.ExecuteCommand(packageArgs, msBuild) .Result; var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; //Preconditions Assert.True(XPlatTestUtils.ValidateReference(projectXmlRoot, packages[0].Id, userInputVersionOld)); //The model fom which the args are generated needs updated as well projectA.AddPackageToAllFrameworks(new SimpleTestPackageContext(packages[0].Id, userInputVersionOld)); packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packages[0].Id, userInputVersionNew, projectA, noVersion: noVersion); commandRunner = new AddPackageReferenceCommandRunner(); // Act // Create a package ref with the new version result = commandRunner.ExecuteCommand(packageArgs, msBuild) .Result; projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; // Assert // Verify that the only package reference is with the new version Assert.Equal(0, result); Assert.True(XPlatTestUtils.ValidateReference(projectXmlRoot, packages[0].Id, noVersion ? latestVersion : userInputVersionNew)); } }
public async void AddPkg_ConditionalAddTwoPackages_Success(string packageFrameworks, string projectFrameworks, string userInputFrameworks) { // Arrange using (var pathContext = new SimpleTestPathContext()) { var projectA = XPlatTestUtils.CreateProject(ProjectName, pathContext, projectFrameworks); var packageX = XPlatTestUtils.CreatePackage("PkgX", frameworkString: packageFrameworks); var packageY = XPlatTestUtils.CreatePackage("PkgY", frameworkString: packageFrameworks); // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); await SimpleTestPackageUtility.CreateFolderFeedV3Async( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageY); var packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageX.Id, packageX.Version, projectA, frameworks: userInputFrameworks); var commandRunner = new AddPackageReferenceCommandRunner(); var msBuild = MsBuild; var commonFramework = XPlatTestUtils.GetCommonFramework(packageFrameworks, projectFrameworks, userInputFrameworks); // Act var result = commandRunner.ExecuteCommand(packageArgs, msBuild) .Result; var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageY.Id, packageY.Version, projectA); // Act result = commandRunner.ExecuteCommand(packageArgs, msBuild) .Result; projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; var itemGroup = XPlatTestUtils.GetItemGroupForFramework(projectXmlRoot, commonFramework); // Assert Assert.Equal(0, result); Assert.True(XPlatTestUtils.ValidateTwoReferences(projectXmlRoot, packageX, packageY)); } }
public async void AddPkg_ConditionalAddAsUpdate_Succcess(string packageFrameworks, string projectFrameworks, string userInputFrameworks, string userInputVersionOld, string userInputVersionNew) { // Arrange using (var pathContext = new SimpleTestPathContext()) { var projectA = XPlatTestUtils.CreateProject(projectName, pathContext, projectFrameworks); var packageX = XPlatTestUtils.CreatePackage(frameworkString: packageFrameworks); // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); var packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageX.Id, userInputVersionOld, projectA); var commandRunner = new AddPackageReferenceCommandRunner(); var msBuild = MsBuild; // Create a package ref with old version var result = commandRunner.ExecuteCommand(packageArgs, msBuild) .Result; var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageX.Id, userInputVersionNew, projectA); commandRunner = new AddPackageReferenceCommandRunner(); var commonFramework = XPlatTestUtils.GetCommonFramework(packageFrameworks, projectFrameworks, userInputFrameworks); // Act // Create a package ref with new version result = commandRunner.ExecuteCommand(packageArgs, msBuild) .Result; projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; // Assert // Verify that the only package reference is with the new version Assert.Equal(0, result); Assert.True(XPlatTestUtils.ValidateReference(projectXmlRoot, packageX.Id, userInputVersionNew)); } }
public async void AddPkg_UnconditionalAddTwoPackages_Success() { // Arrange using (var pathContext = new SimpleTestPathContext()) { var projectA = XPlatTestUtils.CreateProject(projectName, pathContext, "net46"); var packageX = XPlatTestUtils.CreatePackage("PkgX"); var packageY = XPlatTestUtils.CreatePackage("PkgY"); // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageY); var packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageX.Id, packageX.Version, projectA); var commandRunner = new AddPackageReferenceCommandRunner(); // Act var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageY.Id, packageY.Version, projectA); // Act result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; // Assert Assert.Equal(0, result); Assert.True(XPlatTestUtils.ValidateTwoReferences(projectXmlRoot, packageX, packageY)); } }
public async void AddPkg_ConditionalAddWithoutVersion_Success(string packageFrameworks, string projectFrameworks, string userInputFrameworks) { // Arrange using (var pathContext = new SimpleTestPathContext()) { var projectA = XPlatTestUtils.CreateProject(projectName, pathContext, projectFrameworks); var packageX = XPlatTestUtils.CreatePackage(frameworkString: packageFrameworks); // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); // Since user is not inputing a version, it is converted to a "*" in the command var packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageX.Id, "*", projectA, frameworks: userInputFrameworks, noVersion: true); var commandRunner = new AddPackageReferenceCommandRunner(); var commonFramework = XPlatTestUtils.GetCommonFramework(packageFrameworks, projectFrameworks, userInputFrameworks); // Act var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; var itemGroup = XPlatTestUtils.GetItemGroupForFramework(projectXmlRoot, commonFramework); // Assert Assert.Equal(0, result); Assert.NotNull(itemGroup); // Since user did not specify a version, the package reference will contain the resolved version Assert.True(XPlatTestUtils.ValidateReference(itemGroup, packageX.Id, "1.0.0")); } }
public async void AddPkg_UnconditionalAddWithPackageDirectory_Success() { // Arrange using (var tempGlobalPackagesDirectory = TestDirectory.Create()) using (var pathContext = new SimpleTestPathContext()) { var projectA = XPlatTestUtils.CreateProject(projectName, pathContext, "net46"); var packageX = XPlatTestUtils.CreatePackage(); // Generate Package await SimpleTestPackageUtility.CreateFolderFeedV3( pathContext.PackageSource, PackageSaveMode.Defaultv3, packageX); var packageArgs = XPlatTestUtils.GetPackageReferenceArgs(packageX.Id, packageX.Version, projectA, packageDirectory: tempGlobalPackagesDirectory.Path); var commandRunner = new AddPackageReferenceCommandRunner(); // Act var result = commandRunner.ExecuteCommand(packageArgs, MsBuild) .Result; var projectXmlRoot = XPlatTestUtils.LoadCSProj(projectA.ProjectPath).Root; var itemGroup = XPlatTestUtils.GetItemGroupForAllFrameworks(projectXmlRoot); // Assert Assert.Equal(0, result); Assert.NotNull(itemGroup); Assert.True(XPlatTestUtils.ValidateReference(itemGroup, packageX.Id, packageX.Version)); // Since user provided packge directory, assert if package is present Assert.True(XPlatTestUtils.ValidatePackageDownload(tempGlobalPackagesDirectory.Path, packageX)); } }