public void ProjectWithSdkImportsIsRemoveable(string projectFormatString) { _env.SetEnvironmentVariable("MSBuildSDKsPath", _testSdkRoot); string projectInnerContents = @" <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp1.0</TargetFramework> </PropertyGroup> <ItemGroup> <Compile Include=""**\*.cs"" /> <EmbeddedResource Include=""**\*.resx"" /> </ItemGroup> <ItemGroup> <PackageReference Include=""Microsoft.NETCore.App"" Version=""1.0.1"" /> </ItemGroup>"; File.WriteAllText(_sdkPropsPath, " <Project />"); File.WriteAllText(_sdkTargetsPath, "<Project />"); // Based on the new-console-project CLI template (but not matching exactly // should not be a deal-breaker). string content = string.Format(projectFormatString, SdkName, projectInnerContents); ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content))); ProjectRootElement clone = ProjectRootElement.Create(XmlReader.Create(new StringReader(content))); clone.DeepCopyFrom(project); clone.RemoveAllChildren(); }
public async Task CreateInMemoryImport() { if (_unloadCancellationToken.IsCancellationRequested) { return; } using (var access = await _projectLockService.WriteLockAsync(_unloadCancellationToken)) { // A bit odd but we have to "check it out" prior to creating it to avoid some of the validations in chk CPS await access.CheckoutAsync(_inMemoryImportFullPath); // Now either open or create the in-memory file. Normally Create will happen, but in // a scenario where your project had previously failed to load for some reason, need to TryOpen // to avoid a new reason for a project load failure _inMemoryImport = ProjectRootElement.TryOpen(_inMemoryImportFullPath, access.ProjectCollection); if (_inMemoryImport != null) { // The file already exists. Scrape it out so we don’t add duplicate items. _inMemoryImport.RemoveAllChildren(); } else { // The project didn’t already exist, so create it, and then mark the evaluated project dirty // so that MSBuild will notice. This step isn’t necessary if the project was already in memory. _inMemoryImport = CreateEmptyMsBuildProject(_inMemoryImportFullPath, access.ProjectCollection); // Note that we actually need to mark every project evaluation dirty that is already loaded. await ReevaluateLoadedConfiguredProjects(_unloadCancellationToken, access); } _filesItemGroup = _inMemoryImport.AddItemGroup(); _directoriesItemGroup = _inMemoryImport.AddItemGroup(); _temporaryAddedItemGroup = _inMemoryImport.AddItemGroup(); } }
public void ProjectWithSdkImportsIsRemoveable() { File.WriteAllText(_sdkPropsPath, "<Project />"); File.WriteAllText(_sdkTargetsPath, "<Project />"); using (new Helpers.TemporaryEnvironment("MSBuildSDKsPath", _testSdkRoot)) { // Based on the new-console-project CLI template (but not matching exactly // should not be a deal-breaker). string content = $@"<Project Sdk=""{SdkName}"" ToolsVersion=""15.0""> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp1.0</TargetFramework> </PropertyGroup> <ItemGroup> <Compile Include=""**\*.cs"" /> <EmbeddedResource Include=""**\*.resx"" /> </ItemGroup> <ItemGroup> <PackageReference Include=""Microsoft.NETCore.App"" Version=""1.0.1"" /> </ItemGroup> </Project>"; ProjectRootElement project = ProjectRootElement.Create(XmlReader.Create(new StringReader(content))); ProjectRootElement clone = ProjectRootElement.Create(XmlReader.Create(new StringReader(content))); clone.DeepCopyFrom(project); clone.RemoveAllChildren(); } }
private void DeleteCSProjContents(ProjectRootElement projectRoot) { projectRoot.ToolsVersion = null; projectRoot.RemoveAllChildren(); }