Simplify the tool_launcher to build for just one version of .NET Framework

This commit is contained in:
Nate McMaster 2018-01-19 13:28:13 -08:00
parent e3a19395fb
commit c8bae2ffda
6 changed files with 13 additions and 100 deletions

View file

@ -1,36 +0,0 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
using System;
using Microsoft.DotNet.PlatformAbstractions;
namespace Microsoft.DotNet
{
class OSVersionUtil
{
public static bool IsWindows8OrNewer()
{
if (RuntimeEnvironment.OperatingSystemPlatform != Platform.Windows)
{
return false;
}
if (!Version.TryParse(RuntimeEnvironment.OperatingSystemVersion, out var winVersion))
{
// All current versions of Windows have a valid System.Version value for OperatingSystemVersion.
// If parsing fails, let's assume Windows is newer than Win 8.
return true;
}
// Windows 7 = "6.1"
// Windows 8 = "6.2"
// Windows 8.1 = "6.3"
if (winVersion.Major > 6)
{
return true;
}
return winVersion.Minor >= 2;
}
}
}

View file

@ -15,30 +15,15 @@ namespace Microsoft.DotNet.ShellShim
{
public class ShellShimMaker
{
private const string LauncherExeNet45ResourceName = "Microsoft.DotNet.Tools.Launcher.Executable.Net45";
private const string LauncherExeNet35ResourceName = "Microsoft.DotNet.Tools.Launcher.Executable.Net35";
private const string LauncherConfigNet45ResourceName = "Microsoft.DotNet.Tools.Launcher.Config.Net45";
private const string LauncherConfigNet35ResourceName = "Microsoft.DotNet.Tools.Launcher.Config.Net35";
private const string LauncherExeResourceName = "Microsoft.DotNet.Tools.Launcher.Executable";
private const string LauncherConfigResourceName = "Microsoft.DotNet.Tools.Launcher.Config";
private readonly string _launcherExeResourceName;
private readonly string _launcherConfigResourceName;
private readonly string _pathToPlaceShim;
public ShellShimMaker(string pathToPlaceShim)
{
_pathToPlaceShim =
pathToPlaceShim ?? throw new ArgumentNullException(nameof(pathToPlaceShim));
if (OSVersionUtil.IsWindows8OrNewer())
{
_launcherExeResourceName = LauncherExeNet45ResourceName;
_launcherConfigResourceName = LauncherConfigNet45ResourceName;
}
else
{
_launcherExeResourceName = LauncherExeNet35ResourceName;
_launcherConfigResourceName = LauncherConfigNet35ResourceName;
}
}
public void CreateShim(string packageExecutablePath, string shellCommandName)
@ -49,7 +34,7 @@ namespace Microsoft.DotNet.ShellShim
{
CreateConfigFile(shimPath.Value + ".config", entryPoint: packageExecutablePath, runner: "dotnet");
using (var shim = File.Create(shimPath.Value))
using (var exe = typeof(ShellShimMaker).Assembly.GetManifestResourceStream(_launcherExeResourceName))
using (var exe = typeof(ShellShimMaker).Assembly.GetManifestResourceStream(LauncherExeResourceName))
{
exe.CopyTo(shim);
}
@ -81,7 +66,7 @@ namespace Microsoft.DotNet.ShellShim
internal void CreateConfigFile(string outputPath, string entryPoint, string runner)
{
XDocument config;
using (var resource = typeof(ShellShimMaker).Assembly.GetManifestResourceStream(_launcherConfigResourceName))
using (var resource = typeof(ShellShimMaker).Assembly.GetManifestResourceStream(LauncherConfigResourceName))
{
config = XDocument.Load(resource);
}

View file

@ -9,27 +9,16 @@
<ProjectReference Include="..\tool_launcher\tool_launcher.csproj"
ReferenceOutputAssembly="false"
SkipGetTargetFrameworkProperties="true"
SetTargetFramework="TargetFramework=net45"
PrivateAssets="All" />
<ProjectReference Include="..\tool_launcher\tool_launcher.csproj"
ReferenceOutputAssembly="false"
SkipGetTargetFrameworkProperties="true"
SetTargetFramework="TargetFramework=net35"
PrivateAssets="All" />
</ItemGroup>
<Target Name="EmbedDotnetLauncher" BeforeTargets="PrepareForBuild">
<MSBuild Projects="..\tool_launcher\tool_launcher.csproj" Targets="GetTargetPath" Properties="TargetFramework=net45;Configuration=$(Configuration)">
<Output TaskParameter="TargetOutputs" PropertyName="DotnetLauncherNet45FullPath" />
</MSBuild>
<MSBuild Projects="..\tool_launcher\tool_launcher.csproj" Targets="GetTargetPath" Properties="TargetFramework=net35;Configuration=$(Configuration)">
<Output TaskParameter="TargetOutputs" PropertyName="DotnetLauncherNet35FullPath" />
<MSBuild Projects="..\tool_launcher\tool_launcher.csproj" Targets="GetTargetPath" Properties="Configuration=$(Configuration)">
<Output TaskParameter="TargetOutputs" PropertyName="DotnetLauncherFullPath" />
</MSBuild>
<ItemGroup>
<EmbeddedResource Include="$(DotnetLauncherNet45FullPath)" LogicalName="Microsoft.DotNet.Tools.Launcher.Executable.Net45" />
<EmbeddedResource Include="$(DotnetLauncherNet45FullPath).config" LogicalName="Microsoft.DotNet.Tools.Launcher.Config.Net45" />
<EmbeddedResource Include="$(DotnetLauncherNet35FullPath)" LogicalName="Microsoft.DotNet.Tools.Launcher.Executable.Net35" />
<EmbeddedResource Include="$(DotnetLauncherNet35FullPath).config" LogicalName="Microsoft.DotNet.Tools.Launcher.Config.Net35" />
<EmbeddedResource Include="$(DotnetLauncherFullPath)" LogicalName="Microsoft.DotNet.Tools.Launcher.Executable" />
<EmbeddedResource Include="$(DotnetLauncherFullPath).config" LogicalName="Microsoft.DotNet.Tools.Launcher.Config" />
</ItemGroup>
</Target>

View file

@ -3,6 +3,7 @@ Generated by the .NET Core Command Line.
-->
<configuration>
<startup>
<supportedRuntime version="v2.0.50727" />
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>

View file

@ -1,18 +0,0 @@
<!--
Generated by the .NET Core Command Line.
-->
<configuration>
<startup>
<supportedRuntime version="v2.0.50727" />
</startup>
<appSettings>
<!--
To use this launcher, this value must be set. It is a file path or name of the new process being launched.
<add key="entryPoint" value="%entrypoint%" />
This value may also be set. It is an path to another executable used to launch the entry point.
It is treated as single argument.
<add key="runner" value="%runner%" />
-->
</appSettings>
</configuration>

View file

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<!-- Targets .NET Framework 3.5 because .NET Framework 4 is not bundled in Windows 7. -->
<TargetFrameworks>net45;net35</TargetFrameworks>
<!-- Targets .NET Framework 3.5 because .NET Framework 4.5 is not bundled in Windows 7. -->
<TargetFramework>net35</TargetFramework>
<PlatformTarget>AnyCPU</PlatformTarget>
<OutputType>exe</OutputType>
<IsPackable>false</IsPackable>
@ -10,18 +10,10 @@
<Description>
A simple Windows-only shim for launching new processes.
</Description>
<AppConfig>app.$(TargetFramework).config</AppConfig>
<!-- In other words, a workaround for issues with cmd.exe. -->
</PropertyGroup>
<!-- This project must not have any package references. It must be a standalone .exe file -->
<ItemGroup Condition="'$(TargetFramework)' == 'net45'">
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Linq" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' == 'net35'">
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
@ -29,7 +21,7 @@
<!-- Workaround https://github.com/Microsoft/msbuild/issues/1333 -->
<PropertyGroup>
<FrameworkPathOverride Condition="'$(TargetFramework)' == 'net35'">$(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client</FrameworkPathOverride>
<FrameworkPathOverride>$(MSBuildProgramFiles32)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client</FrameworkPathOverride>
</PropertyGroup>
<ItemGroup>