Skip to content

Commit

Permalink
Tried to add assembly signing but was thwarted by CsWinRt.
Browse files Browse the repository at this point in the history
  • Loading branch information
Corillian committed Jan 12, 2022
1 parent f01aafa commit 9c1e6be
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 9 deletions.
21 changes: 19 additions & 2 deletions Build.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -160,10 +160,27 @@ if($pack -eq $true)
$anyCpuControlProj = [System.IO.Path]::Combine($buildPath, 'AnyCPU', 'Release', 'Microsoft.Terminal.Control.Projection', 'bin', 'Microsoft.Terminal.Control.Projection.dll')
$x64SettingsProj = [System.IO.Path]::Combine($buildPath, 'x64', 'Release', 'Microsoft.Terminal.Settings.Model.Projection', 'bin', 'Microsoft.Terminal.Settings.Model.Projection.dll')
$anyCpuSettingsProj = [System.IO.Path]::Combine($buildPath, 'AnyCPU', 'Release', 'Microsoft.Terminal.Settings.Model.Projection', 'bin', 'Microsoft.Terminal.Settings.Model.Projection.dll')
#$x64TermConProj = [System.IO.Path]::Combine($buildPath, 'x64', 'Release', 'Microsoft.Terminal.TerminalConnection.Projection', 'bin', 'Microsoft.Terminal.TerminalConnection.Projection.dll')
#$anyCpuTermConProj = [System.IO.Path]::Combine($buildPath, 'AnyCPU', 'Release', 'Microsoft.Terminal.TerminalConnection.Projection', 'bin', 'Microsoft.Terminal.TerminalConnection.Projection.dll')
$keypairBase = [System.IO.Path]::Combine([System.Environment]::GetFolderPath('UserProfile'), '.windowsterminalkeys')
$keypairControl = [System.IO.Path]::Combine($keypairBase, 'microsoft.terminal.control.projection.snk')
$keypairSettings = [System.IO.Path]::Combine($keypairBase, 'microsoft.terminal.settings.model.projection.snk')
#$keypairTermCon = [System.IO.Path]::Combine($keypairBase, 'microsoft.terminal.terminalconnection.projection.snk')

#Write-Host "Generating AnyCPU assembly for $x64TermConProj at $anyCpuTermConProj"

#& $anyCpuGen $x64TermConProj $anyCpuTermConProj $keypairTermCon

#if($LastExitCode -ne 0)
#{
# throw 'Error: Failed to generate AnyCPU Microsoft.Terminal.TerminalConnection.Projection.dll.'
#}

# NOTE: AnyCPU TerminalConnection compiles just fine so we don't have to jump through hoops to generate it

Write-Host "Generating AnyCPU assembly for $x64ControlProj at $anyCpuControlProj"

& $anyCpuGen $x64ControlProj $anyCpuControlProj
& $anyCpuGen $x64ControlProj $anyCpuControlProj # $keypairControl

if($LastExitCode -ne 0)
{
Expand All @@ -172,7 +189,7 @@ if($pack -eq $true)

Write-Host "Generating AnyCPU assembly for $x64SettingsProj at $anyCpuSettingsProj"

& $anyCpuGen $x64SettingsProj $anyCpuSettingsProj
& $anyCpuGen $x64SettingsProj $anyCpuSettingsProj # $keypairSettings

if($LastExitCode -ne 0)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,12 @@
<CsWinRTGeneratedFilesDir>$(OutDir)</CsWinRTGeneratedFilesDir>
</PropertyGroup>

<!--<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<_UserProfilePath>$([System.Environment]::GetFolderPath(SpecialFolder.UserProfile))</_UserProfilePath>
<SignAssembly>True</SignAssembly>
<AssemblyOriginatorKeyFile>$([System.IO.Path]::Combine($(_UserProfilePath), '.windowsterminalkeys', 'microsoft.terminal.control.projection.snk'))</AssemblyOriginatorKeyFile>
</PropertyGroup>-->

<ItemGroup Condition="'$(Platform)' != 'x86' And '$(Platform)' != 'AnyCPU'">
<CsWinRTInputs Include="$(BuildOutDir)TerminalCore\bin\Microsoft.Terminal.Core.winmd" />
<CsWinRTInputs Include="$(BuildOutDir)Microsoft.Terminal.Control\bin\Microsoft.Terminal.Control.winmd" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@
<CsWinRTGeneratedFilesDir>$(OutDir)</CsWinRTGeneratedFilesDir>
</PropertyGroup>

<!--<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<_UserProfilePath>$([System.Environment]::GetFolderPath(SpecialFolder.UserProfile))</_UserProfilePath>
<SignAssembly>True</SignAssembly>
<AssemblyOriginatorKeyFile>$([System.IO.Path]::Combine($(_UserProfilePath), '.windowsterminalkeys', 'microsoft.terminal.settings.model.projection.snk'))</AssemblyOriginatorKeyFile>
</PropertyGroup>-->

<ItemGroup Condition="'$(Platform)' != 'x86' And '$(Platform)' != 'AnyCPU'">
<CsWinRTInputs Include="$(BuildOutDir)TerminalCore\bin\Microsoft.Terminal.Core.winmd" />
<CsWinRTInputs Include="$(BuildOutDir)Microsoft.Terminal.Control\bin\Microsoft.Terminal.Control.winmd" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,12 @@
<CsWinRTGeneratedFilesDir>$(OutDir)</CsWinRTGeneratedFilesDir>
</PropertyGroup>

<!--<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<_UserProfilePath>$([System.Environment]::GetFolderPath(SpecialFolder.UserProfile))</_UserProfilePath>
<SignAssembly>True</SignAssembly>
<AssemblyOriginatorKeyFile>$([System.IO.Path]::Combine($(_UserProfilePath), '.windowsterminalkeys', 'microsoft.terminal.terminalconnection.projection.snk'))</AssemblyOriginatorKeyFile>
</PropertyGroup>-->

<ItemGroup Condition="'$(Configuration)'=='Debug' And '$(Platform)' != 'x86' And '$(Platform)' != 'AnyCPU'">
<Content Include="$(BuildOutDir)Microsoft.Terminal.TerminalConnection\bin\cpprest142_2_10d.dll" Visible="false" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
Expand Down
2 changes: 1 addition & 1 deletion NuGet/WindowsTerminal.WinUI3.Settings.Model.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,6 @@
<file src="..\_build\x64\Release\Microsoft.Terminal.Settings.Model.Projection\bin\Microsoft.Terminal.Settings.Model.Projection.pri" target="lib\net6.0-windows10.0.18362.0"/>

<!-- For some stupid reason CsWinRT is pulling the native DLL in as a resource and sticking it in the .pri so we have to arbitrarily include one or else bad things happen -->
<!--<file src="..\_build\x64\Release\Microsoft.Terminal.Control\bin\Microsoft.Terminal.Control.dll" target="ref\net6.0-windows10.0.18362.0\Microsoft.Terminal.Control.Projection"/>-->
<file src="..\_build\x64\Release\Microsoft.Terminal.Control\bin\Microsoft.Terminal.Control.dll" target="lib\net6.0-windows10.0.18362.0\Microsoft.Terminal.Control.Projection"/>
</files>
</package>
45 changes: 39 additions & 6 deletions Tools/AnyCpuGenerator/Program.cs
Original file line number Diff line number Diff line change
@@ -1,18 +1,21 @@
namespace AnyCpuGenerator
using System.Reflection;

namespace AnyCpuGenerator
{
public static class Program
{
[STAThread]
public static int Main(string[] args)
{
if(args.Length != 2)
if(args.Length < 2 || args.Length > 3)
{
Console.WriteLine("Usage: AnyCpuGenerator.exe <source assembly> <dest assembly>");
Console.WriteLine("Usage: AnyCpuGenerator.exe <source assembly> <dest assembly> <key pair>");
return 1;
}

var sourcePath = Path.GetFullPath(args[0]);
var destPath = Path.GetFullPath(args[1]);
var keyPairPath = args.Length > 2 ? Path.GetFullPath(args[2]) : null;

if(!File.Exists(args[0]))
{
Expand All @@ -26,22 +29,52 @@ public static int Main(string[] args)
return 3;
}

if(keyPairPath != null && !File.Exists(keyPairPath))
{
Console.WriteLine($"Invalid key pair: {keyPairPath}");
return 4;
}

Mono.Cecil.ReaderParameters parms = new(Mono.Cecil.ReadingMode.Immediate);
using var module = Mono.Cecil.ModuleDefinition.ReadModule(sourcePath, parms);

if((module.Attributes & Mono.Cecil.ModuleAttributes.ILOnly) == 0)
{
Console.WriteLine("Cannot convert assembly to 'AnyCPU' because it isn't IL Only.");
return 4;
return 5;
}

var destDir = Path.GetDirectoryName(destPath);

if(destDir != null && !Directory.Exists(destDir))
{
Directory.CreateDirectory(destDir);
}

// x64: Architecture = AMD64, Attributes = ILOnly
// x86: Architecture = I386, Attributes = ILOnly | Required32Bit
// MSIL: Architecture = I386, Attributes = ILOnly
module.Architecture = Mono.Cecil.TargetArchitecture.I386;
module.Attributes = Mono.Cecil.ModuleAttributes.ILOnly;
module.Attributes &= ~(Mono.Cecil.ModuleAttributes.Required32Bit | Mono.Cecil.ModuleAttributes.Preferred32Bit);

if(keyPairPath != null)
{
var writeParms = new Mono.Cecil.WriterParameters() { StrongNameKeyContainer = keyPairPath };

module.Write(destPath);
if(!writeParms.HasStrongNameKey)
{
Console.WriteLine($"Failed to load the strong name key pair: {keyPairPath}");
return 6;
}

module.Attributes |= Mono.Cecil.ModuleAttributes.StrongNameSigned;
module.Write(destPath, writeParms);
}
else
{
module.Attributes &= ~Mono.Cecil.ModuleAttributes.StrongNameSigned;
module.Write(destPath);
}

return 0;
}
Expand Down

0 comments on commit 9c1e6be

Please sign in to comment.