فهرست منبع

1.SourceGenerator利用msbuild的元数据判断是dotnet core还是unity工程
2.分析器unity使用dll,不再直接引用dotnet工程

tanghai 1 سال پیش
والد
کامیت
87aaffadb5

+ 5 - 0
DotNet/Hotfix/ET.Hotfix.csproj

@@ -55,5 +55,10 @@
         <ProjectReference Include="$(SolutionDir)Unity\Packages\cn.etetet.sourcegenerator\DotNet~\ET.SourceGenerator\ET.SourceGenerator.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
         <ProjectReference Include="..\Model\ET.Model.csproj" />
     </ItemGroup>
+    
+    <!-- sourcegenerator use -->
+    <ItemGroup>
+        <CompilerVisibleProperty Include="DotNetAssembly" />
+    </ItemGroup>
 
 </Project>

+ 6 - 1
DotNet/Model/ET.Model.csproj

@@ -58,5 +58,10 @@
         <ProjectReference Include="..\..\Unity\Packages\cn.etetet.loader\DotNet~\ET.Loader.csproj" />
         <ProjectReference Include="..\..\Unity\Packages\cn.etetet.mathematics\DotNet~\ET.Mathematics.csproj" />
         <ProjectReference Include="..\..\Unity\Packages\cn.etetet.recast\DotNet~\ET.Recast.csproj" />
-    </ItemGroup> 
+    </ItemGroup>
+
+    <!-- sourcegenerator use -->
+    <ItemGroup>
+        <CompilerVisibleProperty Include="DotNetAssembly" />
+    </ItemGroup>
 </Project>

+ 0 - 20
Unity/Packages/cn.etetet.loader/Editor/AssetPostProcessor/OnGenerateCSProjectProcessor.cs

@@ -70,26 +70,6 @@ namespace ET
             var newDoc = doc.Clone() as XmlDocument;
             var rootNode = newDoc.GetElementsByTagName("Project")[0];
 
-            // 添加分析器引用
-            {
-                XmlElement itemGroup = newDoc.CreateElement("ItemGroup", newDoc.DocumentElement.NamespaceURI);
-                var projectReference = newDoc.CreateElement("ProjectReference", newDoc.DocumentElement.NamespaceURI);
-                projectReference.SetAttribute("Include", @"$(SolutionDir)Unity\Packages\cn.etetet.sourcegenerator\DotNet~\ET.Analyzer\ET.Analyzer.csproj");
-                projectReference.SetAttribute("OutputItemType", @"Analyzer");
-                projectReference.SetAttribute("ReferenceOutputAssembly", @"false");
-
-                var project = newDoc.CreateElement("Project", newDoc.DocumentElement.NamespaceURI);
-                project.InnerText = @"{d1f2986b-b296-4a2d-8f12-be9f470014c3}";
-                projectReference.AppendChild(project);
-
-                var name = newDoc.CreateElement("Name", newDoc.DocumentElement.NamespaceURI);
-                name.InnerText = "Analyzer";
-                projectReference.AppendChild(name);
-
-                itemGroup.AppendChild(projectReference);
-                rootNode.AppendChild(itemGroup);
-            }
-
             // AfterBuild(字符串替换后作用是编译后复制到CodeDir)
             {
 

+ 0 - 5
Unity/Packages/cn.etetet.sourcegenerator/DotNet~/ET.SourceGenerator/ET.SourceGenerator.csproj

@@ -38,9 +38,4 @@
             <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
         </PackageReference>
     </ItemGroup>
-<!--注意,复制到unity中需要开启下面的copy,并且关闭ETEntitySerializeFormatterGenerator中的DONET宏-->
-<!--    <Target Name="PostBuild" AfterTargets="PostBuildEvent">
-        <Copy SourceFiles="$(TargetDir)/$(TargetName).dll" DestinationFolder="../../" ContinueOnError="false" />
-    </Target>-->
-
 </Project>

+ 6 - 5
Unity/Packages/cn.etetet.sourcegenerator/DotNet~/ET.SourceGenerator/Generator/ETEntitySerializeFormatterGenerator.cs

@@ -29,13 +29,14 @@ public class ETEntitySerializeFormatterGenerator : ISourceGenerator
         string typeHashCodeMapDeclaration = GenerateTypeHashCodeMapDeclaration(receiver);
         string serializeContent = GenerateSerializeContent(receiver);
         string deserializeContent = GenerateDeserializeContent(receiver);
-#if DOTNET
-        string genericTypeParam = "<TBufferWriter>";
-        string scopedCode = "scoped";
-#else
+        
         string genericTypeParam = "";
         string scopedCode = "";
-#endif
+        if (context.AnalyzerConfigOptions.GlobalOptions.TryGetValue("build_property.DotNetAssembly", out string? _))
+        {
+            genericTypeParam = "<TBufferWriter>";
+            scopedCode = "scoped";
+        }
         
         string code = $$"""
 #nullable enable

BIN
Unity/Packages/cn.etetet.sourcegenerator/ET.Analyzer.dll


+ 79 - 0
Unity/Packages/cn.etetet.sourcegenerator/ET.Analyzer.dll.meta

@@ -0,0 +1,79 @@
+fileFormatVersion: 2
+guid: 61d8ae16251702f4686fdfdc0dd5b892
+labels:
+- RoslynAnalyzer
+PluginImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  iconMap: {}
+  executionOrder: {}
+  defineConstraints: []
+  isPreloaded: 0
+  isOverridable: 1
+  isExplicitlyReferenced: 0
+  validateReferences: 1
+  platformData:
+  - first:
+      : Any
+    second:
+      enabled: 0
+      settings:
+        Exclude Android: 1
+        Exclude Editor: 1
+        Exclude Linux64: 1
+        Exclude OSXUniversal: 1
+        Exclude Win: 1
+        Exclude Win64: 1
+  - first:
+      Android: Android
+    second:
+      enabled: 0
+      settings:
+        AndroidSharedLibraryType: Executable
+        CPU: ARMv7
+  - first:
+      Any: 
+    second:
+      enabled: 0
+      settings: {}
+  - first:
+      Editor: Editor
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+        DefaultValueInitialized: true
+        OS: AnyOS
+  - first:
+      Standalone: Linux64
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: OSXUniversal
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: Win
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Standalone: Win64
+    second:
+      enabled: 0
+      settings:
+        CPU: None
+  - first:
+      Windows Store Apps: WindowsStoreApps
+    second:
+      enabled: 0
+      settings:
+        CPU: AnyCPU
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

BIN
Unity/Packages/cn.etetet.sourcegenerator/ET.SourceGenerator.dll