diff --git a/src/MSIdentityScaffolding/Microsoft.DotNet.MSIdentity/CodeReaderWriter/ProjectModifier.cs b/src/MSIdentityScaffolding/Microsoft.DotNet.MSIdentity/CodeReaderWriter/ProjectModifier.cs index 2293adcf0..71ab9562a 100644 --- a/src/MSIdentityScaffolding/Microsoft.DotNet.MSIdentity/CodeReaderWriter/ProjectModifier.cs +++ b/src/MSIdentityScaffolding/Microsoft.DotNet.MSIdentity/CodeReaderWriter/ProjectModifier.cs @@ -64,7 +64,7 @@ public async Task AddAuthCodeAsync() } // Initialize CodeAnalysis.Project wrapper - CodeAnalysis.Project project = await CodeAnalysisHelper.LoadCodeAnalysisProjectAsync(_toolOptions.ProjectFilePath, _files); + CodeAnalysis.Project project = CodeAnalysisHelper.LoadCodeAnalysisProject(_toolOptions.ProjectFilePath, _files); if (project is null) { return; @@ -228,8 +228,8 @@ internal async Task ModifyCsFile(CodeFile file, CodeAnalysis.Project project, Co file.FileName = await ProjectModifierHelper.GetStartupClass(project.Documents.ToList()) ?? file.FileName; } - var fileDoc = project.Documents.Where(d => d.Name.Equals(file.FileName)).FirstOrDefault(); - if (fileDoc is null || string.IsNullOrEmpty(fileDoc.FilePath)) + var fileDoc = project.Documents.Where(d => d.Name.EndsWith(file.FileName)).FirstOrDefault(); + if (fileDoc is null || string.IsNullOrEmpty(fileDoc.Name)) { return; } @@ -246,7 +246,7 @@ internal async Task ModifyCsFile(CodeFile file, CodeAnalysis.Project project, Co if (modifiedRoot != null) { documentEditor.ReplaceNode(documentEditor.OriginalRoot, modifiedRoot); - await documentBuilder.WriteToClassFileAsync(fileDoc.FilePath); + await documentBuilder.WriteToClassFileAsync(fileDoc.Name); _output.AppendLine($"Modified {file.FileName}"); // TODO strings. } } diff --git a/src/Shared/Microsoft.DotNet.Scaffolding.Shared/CodeModifier/CodeAnalysisHelper.cs b/src/Shared/Microsoft.DotNet.Scaffolding.Shared/CodeModifier/CodeAnalysisHelper.cs index ef0247a99..c48f0dede 100644 --- a/src/Shared/Microsoft.DotNet.Scaffolding.Shared/CodeModifier/CodeAnalysisHelper.cs +++ b/src/Shared/Microsoft.DotNet.Scaffolding.Shared/CodeModifier/CodeAnalysisHelper.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; -using System.Threading.Tasks; -using Microsoft.CodeAnalysis.MSBuild; +using System.IO; +using Microsoft.CodeAnalysis; namespace Microsoft.DotNet.Scaffolding.Shared.CodeModifier { @@ -8,15 +8,15 @@ namespace Microsoft.DotNet.Scaffolding.Shared.CodeModifier public static class CodeAnalysisHelper { //helps create a CodeAnalysis.Project with project files given a project path. - public static async Task LoadCodeAnalysisProjectAsync( + public static CodeAnalysis.Project LoadCodeAnalysisProject( string projectFilePath, IEnumerable files) { - var workspace = MSBuildWorkspace.Create(); - var project = await workspace.OpenProjectAsync(projectFilePath); + var workspace = new AdhocWorkspace(); + var project = workspace.AddProject(Path.GetFileName(projectFilePath), "C#"); var projectWithFiles = project.WithAllSourceFiles(files); project = projectWithFiles ?? project; return project; - } + } } } diff --git a/src/Shared/Microsoft.DotNet.Scaffolding.Shared/Project/ProjectModifierHelper.cs b/src/Shared/Microsoft.DotNet.Scaffolding.Shared/Project/ProjectModifierHelper.cs index 560503247..7ce8ded0d 100644 --- a/src/Shared/Microsoft.DotNet.Scaffolding.Shared/Project/ProjectModifierHelper.cs +++ b/src/Shared/Microsoft.DotNet.Scaffolding.Shared/Project/ProjectModifierHelper.cs @@ -8,7 +8,6 @@ using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Text; -using Microsoft.DotNet.MSIdentity.Shared; using Microsoft.DotNet.Scaffolding.Shared.CodeModifier; using Microsoft.DotNet.Scaffolding.Shared.CodeModifier.CodeChange; @@ -497,10 +496,7 @@ internal static async Task ModifyDocumentText(Document fileDoc, IEnume internal static async Task UpdateDocument(Document document) { var classFileTxt = await document.GetTextAsync(); - - // Note: For files without .cs extension, document.Name is the full filepath - var filePath = document.Name.EndsWith(".cs") ? document.FilePath : document.Name; - File.WriteAllText(filePath, classFileTxt.ToString(), new UTF8Encoding(false)); + File.WriteAllText(document.Name, classFileTxt.ToString(), new UTF8Encoding(false)); return $"Modified {document.Name}.\n"; // todo strings. } diff --git a/test/Shared/Microsoft.DotNet.Scaffolding.Shared.Tests/CodeAnalysisHelperTests.cs b/test/Shared/Microsoft.DotNet.Scaffolding.Shared.Tests/CodeAnalysisHelperTests.cs new file mode 100644 index 000000000..5149af107 --- /dev/null +++ b/test/Shared/Microsoft.DotNet.Scaffolding.Shared.Tests/CodeAnalysisHelperTests.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using Microsoft.DotNet.Scaffolding.Shared.CodeModifier; +using Xunit; + +namespace Microsoft.DotNet.Scaffolding.Shared.Tests +{ + public class CodeAnalysisHelperTests + { + [Fact] + public void LoadCodeAnalysisProjectTest() + { + var files = new List(); + var projectPath = string.Empty; // TODO test project + var project = CodeAnalysisHelper.LoadCodeAnalysisProject(projectPath, files); + Assert.NotNull(project); + } + } +}