@@ -41,7 +41,58 @@ private static string OnGeneratedCSProject(string path, string content)
4141 content = Regex . Replace ( content , "(\\ s+)(<LangVersion>.*</LangVersion>)([\r \n ]+)" , "$1$2$3$1<Nullable>" + value + "</Nullable>$3" ) ;
4242 }
4343
44+ // Additional contents.
45+ // content = Regex.Replace(content, "^</Project>", "<!-- C# Settings For Unity -->", RegexOptions.Singleline);
46+ content = Regex . Replace ( content , "[\r \n ]+</Project>[\r \n ]*" , "\r \n <!-- C# Settings For Unity -->" ) ;
47+ {
48+ content += NewLine + " <ItemGroup>" ;
49+ {
50+ // Add compiler package.
51+ if ( ! setting . UseDefaultCompiler )
52+ content = AddPackage ( content , setting . CompilerPackage . Name , setting . CompilerPackage . Version ) ;
53+
54+ // Add analyzer packages.
55+ foreach ( var package in setting . AnalyzerPackages )
56+ content = AddPackage ( content , package . Name , package . Version ) ;
57+ }
58+ content += NewLine + " </ItemGroup>" ;
59+
60+ // Add rule set files.
61+ content += NewLine + " <PropertyGroup>" ;
62+ {
63+ // Ruleset.
64+ var rulesets = new [ ] { "Assets/Default.ruleset" } // Add default rule set for project.
65+ . Concat ( string . IsNullOrEmpty ( asmdefPath )
66+ ? new [ ] { "Assets/" + assemblyName + ".ruleset" } // Add rule set for predefined assemblies (e.g. Assembly-CSharp.dll).
67+ : Directory . GetFiles ( Path . GetDirectoryName ( asmdefPath ) , "*.ruleset" ) ) // Add rule sets for asmdef.
68+ . Where ( File . Exists ) ;
69+
70+ foreach ( var ruleset in rulesets )
71+ content = AddRuleSet ( content , ruleset ) ;
72+ }
73+ content += NewLine + " </PropertyGroup>" ;
74+ }
75+ content += NewLine + "<!-- C# Settings For Unity -->" + NewLine + NewLine + "</Project>" + NewLine ;
76+
4477 return content ;
4578 }
79+
80+ private static string AddPackage ( string content , string name , string version )
81+ {
82+ content += NewLine + " <PackageReference Include=\" " + name + "\" Version=\" " + version + "\" >" ;
83+ content += NewLine + " <PrivateAssets>all</PrivateAssets>" ;
84+ content += NewLine + " <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>" ;
85+ content += NewLine + " </PackageReference>" ;
86+ return content ;
87+ }
88+
89+ private static string AddRuleSet ( string content , string ruleset )
90+ {
91+ if ( File . Exists ( ruleset ) )
92+ content += NewLine + " <CodeAnalysisRuleSet>" + ruleset . Replace ( '/' , '\\ ' ) + "</CodeAnalysisRuleSet>" ;
93+ return content ;
94+ }
95+
96+ private static string NewLine = "\r \n " ;
4697 }
4798}
0 commit comments