private static void SpecifyLangVersion(CSharpProject csproj) { var unityVersion = Application.unityVersion; var csharpVersion = unityVersion.CompareTo("5.5") >= 0 ? default(int?) : 4; csproj.SpecifyLangVersion(csharpVersion); }
private void UpdateReferences(CSharpProject csproj) { var log = new System.Text.StringBuilder(); // Boo.Lang は無条件で消す。 csproj.RemoveReference("Boo.Lang"); csproj.RemoveReference(RootProject.Name); foreach (var refProj in RootProject.GetAllCSharpProjectReferences()) { log.AppendLine($"updare ref {refProj.Name}"); // Game プロジェクト関連のアセンブリ参照削除。 csproj.RemoveReference(refProj.Name); // Game プロジェクト関連の参照を追加。 csproj.AddProjectReference(refProj); } foreach (var analyser in RootProject.AnalyzerReferences) { log.AppendLine($"add analyzer {analyser}"); // Game プロジェクト関連のアナライザーを追加。 csproj.AddAnalyzer(analyser); } Debug.Log(@"ProjectPostprocessor: UpdateReferences " + log.ToString()); }
private string OnGeneratedProjectFile(string fileName, string fileContent) { // Editor, Plugins プロジェクトは無視する。 if (fileName.Contains(".Editor.")) { return(fileContent); } var csproj = new CSharpProject(Path.Combine(ProjectRoot, fileName), fileContent); UpdateReferences(csproj); SpecifyLangVersion(csproj); return(csproj.Content); }
private string OnGeneratedProjectFile(string fileName, string fileContent) { var csproj = new CSharpProject(Path.Combine(ProjectRoot, fileName), fileContent); if (!fileName.Contains(".Editor.")) { // Editor プロジェクトの場合、DLL参照→プロジェクト参照のつなぎ変えまではやらない // (<LangVersion>4</LangVersion> の書き換えとかだけする。) UpdateReferences(csproj); } csproj.RemoveTargetFrameworkProfile(); SpecifyLangVersion(csproj); return(csproj.Content); }
private static IEnumerable <CSharpProject> GetRecursively(CSharpProject project, Func <CSharpProject, IEnumerable <CSharpProject> > getChildren, HashSet <CSharpProject> set) { yield return(project); foreach (var x in getChildren(project)) { if (set.Contains(x)) { continue; } set.Add(x); foreach (var child in GetRecursively(x, getChildren, set)) { yield return(child); } } }
/// <summary> /// プロジェクトに別プロジェクトの参照を追加する。 /// </summary> /// <param name="project">プロジェクト。</param> public void AddProjectReference(CSharpProject project) { var xml = $@" <ProjectReference Include=""{project.Path}""> <Project>{{{project.Guid.ToString().ToUpper()}}}</Project> <Name>{project.Name}</Name> </ProjectReference> "; var match = regProjectReferenceClose.Match(Content); if (match.Success) { var index = match.Index + match.Value.Length - "</ItemGroup>".Length; Content = Content.Insert(index, xml); } else { var index = Content.LastIndexOf("</Project>"); // ProjectReference 用の ItemGroup が見つからないので末尾に追加する。 xml = $" <ItemGroup>\n{xml} </ItemGroup>\n"; Content = Content.Insert(index, xml); } }
/// <summary>Record Constructor</summary> /// <param name="gameProject"><see cref="RootProject"/></param> public ProjectPostprocessor(CSharpProject gameProject = default(CSharpProject)) { RootProject = gameProject; }