暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

LegacyStyleProjectGeneration.cs 6.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*---------------------------------------------------------------------------------------------
  2. * Copyright (c) Unity Technologies.
  3. * Copyright (c) Microsoft Corporation. All rights reserved.
  4. * Licensed under the MIT License. See License.txt in the project root for license information.
  5. *--------------------------------------------------------------------------------------------*/
  6. using System.Text;
  7. using UnityEditor.Compilation;
  8. namespace Microsoft.Unity.VisualStudio.Editor
  9. {
  10. internal class LegacyStyleProjectGeneration : ProjectGeneration
  11. {
  12. internal override string StyleName => "Legacy";
  13. public LegacyStyleProjectGeneration(string tempDirectory, IAssemblyNameProvider assemblyNameProvider, IFileIO fileIoProvider, IGUIDGenerator guidGenerator) : base(tempDirectory, assemblyNameProvider, fileIoProvider, guidGenerator)
  14. {
  15. }
  16. public LegacyStyleProjectGeneration(string tempDirectory) : base(tempDirectory)
  17. {
  18. }
  19. public LegacyStyleProjectGeneration()
  20. {
  21. }
  22. internal override void GetProjectHeader(ProjectProperties properties, out StringBuilder headerBuilder)
  23. {
  24. headerBuilder = new StringBuilder();
  25. //Header
  26. headerBuilder.Append(@"<?xml version=""1.0"" encoding=""utf-8""?>").Append(k_WindowsNewline);
  27. headerBuilder.Append($@"<Project ToolsVersion=""4.0"" DefaultTargets=""Build"" xmlns=""{MSBuildNamespaceUri}"">").Append(k_WindowsNewline);
  28. headerBuilder.Append(@" <!-- Generated file, do not modify, your changes will be overwritten (use AssetPostprocessor.OnGeneratedCSProject) -->").Append(k_WindowsNewline);
  29. headerBuilder.Append(@" <PropertyGroup>").Append(k_WindowsNewline);
  30. headerBuilder.Append(@" <LangVersion>").Append(properties.LangVersion).Append(@"</LangVersion>").Append(k_WindowsNewline);
  31. headerBuilder.Append(@" </PropertyGroup>").Append(k_WindowsNewline);
  32. headerBuilder.Append(@" <PropertyGroup>").Append(k_WindowsNewline);
  33. headerBuilder.Append(@" <Configuration Condition="" '$(Configuration)' == '' "">Debug</Configuration>").Append(k_WindowsNewline);
  34. headerBuilder.Append(@" <Platform Condition="" '$(Platform)' == '' "">AnyCPU</Platform>").Append(k_WindowsNewline);
  35. headerBuilder.Append(@" <ProductVersion>10.0.20506</ProductVersion>").Append(k_WindowsNewline);
  36. headerBuilder.Append(@" <SchemaVersion>2.0</SchemaVersion>").Append(k_WindowsNewline);
  37. headerBuilder.Append(@" <RootNamespace>").Append(properties.RootNamespace).Append(@"</RootNamespace>").Append(k_WindowsNewline);
  38. headerBuilder.Append(@" <ProjectGuid>{").Append(properties.ProjectGuid).Append(@"}</ProjectGuid>").Append(k_WindowsNewline);
  39. headerBuilder.Append(@" <OutputType>Library</OutputType>").Append(k_WindowsNewline);
  40. headerBuilder.Append(@" <AppDesignerFolder>Properties</AppDesignerFolder>").Append(k_WindowsNewline);
  41. headerBuilder.Append(@" <AssemblyName>").Append(properties.AssemblyName).Append(@"</AssemblyName>").Append(k_WindowsNewline);
  42. // In the end, given we use NoConfig/NoStdLib (see below), hardcoding the target framework version with the legacy format will have no impact, even when targeting netstandard/net48 from Unity.
  43. // And VSTU/Unity Game workload has a dependency towards net471 reference assemblies, so IDE will not complain that this specific SDK is not available.
  44. // Unity already selected proper API surface through referenced DLLs for us.
  45. headerBuilder.Append(@" <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>").Append(k_WindowsNewline);
  46. headerBuilder.Append(@" <FileAlignment>512</FileAlignment>").Append(k_WindowsNewline);
  47. headerBuilder.Append(@" <BaseDirectory>.</BaseDirectory>").Append(k_WindowsNewline);
  48. headerBuilder.Append(@" </PropertyGroup>").Append(k_WindowsNewline);
  49. GetProjectHeaderConfigurations(properties, headerBuilder);
  50. // Explicit references
  51. headerBuilder.Append(@" <PropertyGroup>").Append(k_WindowsNewline);
  52. headerBuilder.Append(@" <NoConfig>true</NoConfig>").Append(k_WindowsNewline);
  53. headerBuilder.Append(@" <NoStdLib>true</NoStdLib>").Append(k_WindowsNewline);
  54. headerBuilder.Append(@" <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences>").Append(k_WindowsNewline);
  55. headerBuilder.Append(@" <ImplicitlyExpandNETStandardFacades>false</ImplicitlyExpandNETStandardFacades>").Append(k_WindowsNewline);
  56. headerBuilder.Append(@" <ImplicitlyExpandDesignTimeFacades>false</ImplicitlyExpandDesignTimeFacades>").Append(k_WindowsNewline);
  57. headerBuilder.Append(@" </PropertyGroup>").Append(k_WindowsNewline);
  58. GetProjectHeaderVstuFlavoring(properties, headerBuilder);
  59. GetProjectHeaderAnalyzers(properties, headerBuilder);
  60. }
  61. internal override void AppendProjectReference(Assembly assembly, Assembly reference, StringBuilder projectBuilder)
  62. {
  63. // If the current assembly is a Player project, we want to project-reference the corresponding Player project
  64. var referenceName = m_AssemblyNameProvider.GetAssemblyName(assembly.outputPath, reference.name);
  65. projectBuilder.Append(@" <ProjectReference Include=""").Append(referenceName).Append(GetProjectExtension()).Append(@""">").Append(k_WindowsNewline);
  66. projectBuilder.Append(" <Project>{").Append(ProjectGuid(referenceName)).Append("}</Project>").Append(k_WindowsNewline);
  67. projectBuilder.Append(" <Name>").Append(referenceName).Append("</Name>").Append(k_WindowsNewline);
  68. projectBuilder.Append(" </ProjectReference>").Append(k_WindowsNewline);
  69. }
  70. internal override void GetProjectFooter(StringBuilder footerBuilder)
  71. {
  72. footerBuilder.Append(string.Join(k_WindowsNewline,
  73. $" <Import Project=\"{@"$(MSBuildToolsPath)\Microsoft.CSharp.targets".NormalizePathSeparators()}\" />",
  74. @" <Target Name=""GenerateTargetFrameworkMonikerAttribute"" />",
  75. @" <!-- To modify your build process, add your task inside one of the targets below and uncomment it.",
  76. @" Other similar extension points exist, see Microsoft.Common.targets.",
  77. @" <Target Name=""BeforeBuild"">",
  78. @" </Target>",
  79. @" <Target Name=""AfterBuild"">",
  80. @" </Target>",
  81. @" -->",
  82. @"</Project>",
  83. @""));
  84. }
  85. }
  86. }