Visual Studio BizTalk Signing Properties

BizTalk Server Best practices, Tips, and Tricks: #10 Visual Studio BizTalk Server Signing Properties

Published on : Feb 21, 2023

Category : BizTalk Server

Sandro

Author

Welcome again to another BizTalk Server Best practices, Tips, and Tricks blog post! In my previous blog posts, I discussed some essential tips and tricks for BizTalk Server administrators:

And for BizTalk Server Developers:

Today I’m going to speak about another critical Best practice, Tips and Tricks for BizTalk Server developers: How to configure Visual Studio BizTalk Server Signing Properties easily.

Visual Studio BizTalk Signing Properties

Visual Studio BizTalk Server Signing Properties

In my previous tip, I provided a PowerShell script to fix or configure the Deployment Properties of a BizTalk project. However, before deploying a BizTalk project, we must first strongly sign the assemblies involved in the project to give them a unique identification for allowing them to be installed into the GAC.

GAC (Global Assembly Cache) is a machine code cache that stores assemblies that can be shared by multiple applications on the computer. These assemblies need to be strongly signed to have unique identification in the GAC.

A strong-named assembly provides several security benefits:

  • A strong name guarantees the uniqueness of the assembly by assigning a digital signature and a unique key pair.
  • A strong name protects the lineage of the assembly by ensuring that no one else can generate a subsequent version of the assembly.
  • A strong name provides a strong integrity check to guarantee that the contents of the assembly have not changed since the last build.

While deploying a BizTalk solution, Visual Studio first builds the assemblies. The deployment process requires that each assembly is strongly signed. You can strongly sign your assemblies by associating the project with a strong name assembly key file.

The task of strongly signing an assembly is a straightforward and easy task – you can know more about it here – but now imagine that you have almost 200 projects inside a unique Visual Studio Solution! It will be an insane and time-consuming operation.

With this PowerShell script, you will be able to parameterize all projects inside a Visual Studio Solution running a single line of code and avoid spending numerous hours doing this task manually.

So, is there a better and fast way?

Yes, there is, and that is why I like PowerShell! We can easily script these tasks with a simple PowerShell script and reuse it for all projects.

For example, with this PowerShell: Fixing BizTalk Project Signing Properties with PowerShell, you can sign all projects inside a Visual Studio Solution running a single line of code and avoid spending numerous hours doing this task manually.

$allPropertyGroup = $xml.Project.PropertyGroup
foreach($node in $allPropertyGroup)
{
    if($node.AssemblyOriginatorKeyFile -ne $null)
    {
        $addNewKeyNodeFlag = $false;
        $node.AssemblyOriginatorKeyFile= $keyName;
    }
    if($node.SignAssembly -ne $null)
    {
        $addNewSignNodeFlag = $false;
        $node.SignAssembly= $true;
    }
}
if($addNewKeyNodeFlag -eq $true)
{
    $childItemGroup = $xml.CreateElement("PropertyGroup",$xdNS)
    $childNone = $xml.CreateElement("AssemblyOriginatorKeyFile",$xdNS)
    $childNone.AppendChild($xml.CreateTextNode($keyName));
    $childItemGroup.AppendChild($childNone)
    $xml.Project.InsertBefore($childItemGroup, $xml.Project.ItemGroup[0])
}
if($addNewSignNodeFlag -eq $true)
{
    $childItemGroup = $xml.CreateElement("PropertyGroup",$xdNS)
    $childNone = $xml.CreateElement("SignAssembly",$xdNS)
    $childNone.AppendChild($xml.CreateTextNode($true));
    $childItemGroup.AppendChild($childNone)
    $xml.Project.InsertBefore($childItemGroup, $xml.Project.ItemGroup[0])
}
$allItemGroup = $xml.Project.ItemGroup.None;
foreach($node in $allItemGroup)
{
    if($node.Include -eq $keyName)
    {
        $addKeyToSolutionFlag = $false;
    }
}
if($addKeyToSolutionFlag -eq $true)
{
    $childItemGroup = $xml.CreateElement("ItemGroup",$xdNS)
    $childNone = $xml.CreateElement("None",$xdNS)
    $childNone.SetAttribute("Include", $keyName)
    $childItemGroup.AppendChild($childNone)
    $xml.Project.InsertBefore($childItemGroup, $xml.Project.Import[0])
}

 

THIS POWERSHELL IS PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND.

You can download Visual Studio: Fixing BizTalk Project Signing Properties with PowerShell from GitHub here.

Stay tuned for the following BizTalk Server Best practices, Tips, and Tricks.