Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
2b1a82a
draft: Add .NET support to native assembly redirection with custom ALC
alexeypukhov Dec 12, 2025
365caba
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Jan 16, 2026
dbef159
Extend AssmeblyRedirection build infrastructure to cross platform:
alexeypukhov Jan 19, 2026
e8e4b98
fix GCC 9.4.0 compiler issue on Linux build with unsupported modern m…
alexeypukhov Jan 20, 2026
f9032da
fix dealing with Assemblies.csproj project on Linux envs by making su…
alexeypukhov Jan 20, 2026
4b0f37d
fix intermediate code format in c++
alexeypukhov Jan 20, 2026
9166171
Generalize assembly redirection naming
alexeypukhov Jan 20, 2026
e113147
Remove generation of AdditionalDeps and Store folders previously used…
alexeypukhov Jan 20, 2026
c7d3ea1
Revert "fix GCC 9.4.0 compiler issue on Linux build with unsupported …
alexeypukhov Jan 20, 2026
ba962a3
Fix cross-platform string literal compatibility in native redirection…
alexeypukhov Jan 20, 2026
ffe58c3
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Jan 20, 2026
ac02961
Bumpup .NET dependencies + optimize common dependencies in property file
alexeypukhov Jan 20, 2026
2c40e2d
Fix NU1510 warning on Linux build: pruning of System.Threading.Channe…
alexeypukhov Jan 22, 2026
beecc7a
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Jan 22, 2026
5dfc033
revert accidental change to auto-generated file
alexeypukhov Jan 22, 2026
e602ccc
adjust included packages for .NET assembly redirection to what it use…
alexeypukhov Jan 23, 2026
81a3f4c
adress comment use AssemblyLoadContext.Default.LoadFromAssemblyPath w…
alexeypukhov Jan 24, 2026
c9b24e3
fix assembly_redirection.h auto-generation drift between Windows and …
alexeypukhov Jan 25, 2026
c7d7d3f
remove unnecessary changes in AssemblyRedirectionSourceGenerator
alexeypukhov Jan 26, 2026
bb454fc
optimize netfx/net setup for TargetFramework.OutputFolder
alexeypukhov Jan 26, 2026
870bdeb
bump up 8.x versions for net8.0 assembly redirections
alexeypukhov Jan 26, 2026
dddf3a5
add clarification comment for Assemblies.csproj DisableTransitiveFram…
alexeypukhov Jan 26, 2026
a018afc
fix accidental compilation failure
alexeypukhov Jan 26, 2026
cc66e08
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Jan 26, 2026
e6dc33c
minor optimization for output folders for netfx and net
alexeypukhov Jan 26, 2026
e0aa4cc
bring back important comment in cor_profiler.cpp + minor reorder of .…
alexeypukhov Jan 27, 2026
5b894ae
minor improvement in traces to separate StartupHook traces from Loader
alexeypukhov Jan 28, 2026
76ecb63
fixes to Unit tests (non-Integration):
alexeypukhov Jan 28, 2026
5233542
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Jan 28, 2026
bd31fef
fix compilation failure in BuildTests.cs (typo)
alexeypukhov Jan 28, 2026
e8b9477
enable ReferencedPackagesNoUnsupportedNet() test
alexeypukhov Jan 28, 2026
f4f3fc7
temporarily skip ReferencedPackagesNoUnsupportedNet() on non-Windows …
alexeypukhov Jan 28, 2026
303361d
fix trusted platform parse on non-Windows
alexeypukhov Jan 29, 2026
5ecd7be
Fix console deadlock blocking span collection in tests
alexeypukhov Jan 29, 2026
8496003
Revert [fragily implemented] "Fix console deadlock blocking span coll…
alexeypukhov Jan 29, 2026
b077f88
Fix test deadlocks by ensuring consistent process stream draining
alexeypukhov Jan 29, 2026
73c9f15
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Jan 29, 2026
76d888d
Fix missing .link handling in AssemblyResolver.Net
alexeypukhov Jan 29, 2026
5817121
move temporary debug console outputs under envvariable flag to avoid …
alexeypukhov Jan 30, 2026
8a9d7f5
update documentation/scripts to remove references to DOTNET_ADDITIONA…
alexeypukhov Jan 30, 2026
6a147b2
fix path to renamed project to be relative to satisfy the CI pipeline
alexeypukhov Jan 30, 2026
54819cf
rename OTEL_DOTNET_AUTO_NETFX_REDIRECT_ENABLED to OTEL_DOTNET_AUTO_RE…
alexeypukhov Jan 30, 2026
58a2c27
update .verified.txt files for IntegrationTests.BuildTests.Distributi…
alexeypukhov Jan 30, 2026
35b54e4
more fixes to docs formatting
alexeypukhov Jan 30, 2026
bdbc0d9
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Jan 30, 2026
9a07b16
cleanup: remove temporary debug traces in console
alexeypukhov Jan 30, 2026
10411b9
remove using of ManagedProfilerAssemblyLoadContext for Native Profile…
alexeypukhov Feb 1, 2026
d2fcb0b
PoC for StartupHook-only solution for Assembly resolving
alexeypukhov Feb 3, 2026
c9c3395
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Feb 3, 2026
549f48c
harden the requirement for StartupHook-only deployment Isolation mode…
alexeypukhov Feb 3, 2026
b9e5d56
minor compilation fix with Loader code targeting net9.0+ (not used fo…
alexeypukhov Feb 9, 2026
6db8a4b
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Feb 9, 2026
ea862ec
more elegant solution for Assembly.SetEntryAssembly(Assembly) reflect…
alexeypukhov Feb 10, 2026
4eac2c1
reverse the order of checking for target application entrypoint assem…
alexeypukhov Feb 10, 2026
1a7e168
revise some comments in Loader
alexeypukhov Feb 10, 2026
078be65
reuse existing logic to load OpenTelemetry.AutoInstrumentation in the…
alexeypukhov Feb 10, 2026
5cba8e5
Add support for legacy env variable OTEL_DOTNET_AUTO_NETFX_REDIRECT_E…
alexeypukhov Feb 10, 2026
8a1f101
cleanup TODO from docs
alexeypukhov Feb 10, 2026
98c7faa
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Feb 10, 2026
f0055a7
extract evaluation of ManagedProfilerFolder and TrustedPlatformAssemb…
alexeypukhov Feb 11, 2026
7f2e712
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Feb 11, 2026
d187e84
get rid of deducting managed profiler runtime folder as a parent of v…
alexeypukhov Feb 11, 2026
f9bca7c
Move Isolation mode setup to StartupHook
alexeypukhov Feb 12, 2026
9aaa966
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Feb 13, 2026
e6bd802
revert StartupHook.LoaderAssemblyLocation evaluation as ManagedProfil…
alexeypukhov Feb 13, 2026
729ad25
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Feb 13, 2026
753c59b
add dcoumentation about Assembly Conflict Resolution and update few c…
alexeypukhov Feb 14, 2026
8e67ff0
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Feb 14, 2026
f0b9f18
fix broken link after the resource was removed
alexeypukhov Feb 17, 2026
d74bf56
address comments in docs
alexeypukhov Feb 17, 2026
4b67030
Merge remote-tracking branch 'upstream/main' into feature/4715-assemb…
alexeypukhov Feb 17, 2026
d5900cf
more fix to broken link in CHANGELOG.md
alexeypukhov Feb 17, 2026
103f980
fix spelling issues in docs
alexeypukhov Feb 17, 2026
6d0967e
fix doc formatting
alexeypukhov Feb 17, 2026
2ab60bc
Merge branch 'main' into feature/4715-assembly-conflict-resolution
alexeypukhov Feb 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 1 addition & 20 deletions OpenTelemetry.AutoInstrumentation.sln
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.AutoInstrumen
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestApplication.Smoke", "test\test-applications\integrations\TestApplication.Smoke\TestApplication.Smoke.csproj", "{FF665CC4-6643-4614-A1A0-FA182E3AF37C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.AutoInstrumentation.AdditionalDeps", "src\OpenTelemetry.AutoInstrumentation.AdditionalDeps\OpenTelemetry.AutoInstrumentation.AdditionalDeps.csproj", "{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenTelemetry.AutoInstrumentation.Tests", "test\OpenTelemetry.AutoInstrumentation.Tests\OpenTelemetry.AutoInstrumentation.Tests.csproj", "{065FEB4E-A99E-4A59-8112-1CB30CF794F9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestApplication.Http", "test\test-applications\integrations\TestApplication.Http\TestApplication.Http.csproj", "{4E17BE29-B227-41D8-97FE-26F674951E26}"
Expand Down Expand Up @@ -254,7 +252,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApplication.ProfilerSpa
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApplication.NoCode", "test\test-applications\integrations\TestApplication.NoCode\TestApplication.NoCode.csproj", "{500BF40F-EECB-4F6A-377B-EDBDFFDE09BE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTelemetry.AutoInstrumentation.Assemblies.NetFramework", "src\OpenTelemetry.AutoInstrumentation.Assemblies.NetFramework\OpenTelemetry.AutoInstrumentation.Assemblies.NetFramework.csproj", "{B69564D4-7D5B-7147-6CBA-233BB8A33C50}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTelemetry.AutoInstrumentation.Assemblies", "src\OpenTelemetry.AutoInstrumentation.Assemblies\OpenTelemetry.AutoInstrumentation.Assemblies.csproj", "{B69564D4-7D5B-7147-6CBA-233BB8A33C50}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestApplication.Wcf.Core", "test\test-applications\integrations\TestApplication.Wcf.Core\TestApplication.Wcf.Core.csproj", "{0F864722-CE44-4D99-9B67-CF0ED1893FF1}"
EndProject
Expand Down Expand Up @@ -502,22 +500,6 @@ Global
{FF665CC4-6643-4614-A1A0-FA182E3AF37C}.Release|x64.Build.0 = Release|x64
{FF665CC4-6643-4614-A1A0-FA182E3AF37C}.Release|x86.ActiveCfg = Release|x86
{FF665CC4-6643-4614-A1A0-FA182E3AF37C}.Release|x86.Build.0 = Release|x86
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Debug|ARM64.Build.0 = Debug|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Debug|x64.ActiveCfg = Debug|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Debug|x64.Build.0 = Debug|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Debug|x86.ActiveCfg = Debug|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Debug|x86.Build.0 = Debug|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Release|Any CPU.Build.0 = Release|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Release|ARM64.ActiveCfg = Release|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Release|ARM64.Build.0 = Release|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Release|x64.ActiveCfg = Release|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Release|x64.Build.0 = Release|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Release|x86.ActiveCfg = Release|Any CPU
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F}.Release|x86.Build.0 = Release|Any CPU
{065FEB4E-A99E-4A59-8112-1CB30CF794F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{065FEB4E-A99E-4A59-8112-1CB30CF794F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{065FEB4E-A99E-4A59-8112-1CB30CF794F9}.Debug|ARM64.ActiveCfg = Debug|Any CPU
Expand Down Expand Up @@ -1662,7 +1644,6 @@ Global
{35AB65D8-D76E-40C6-B10C-501A6D44C9E0} = {5C915382-C886-457D-8641-9E766D8E5A17}
{E04DA938-E153-4A0D-9CB0-EAC38210FAF2} = {9E5F0022-0A50-40BF-AC6A-C3078585ECAB}
{FF665CC4-6643-4614-A1A0-FA182E3AF37C} = {E409ADD3-9574-465C-AB09-4324D205CC7C}
{E026D9FA-FBD5-4066-AF6A-FB63DE28521F} = {9E5F0022-0A50-40BF-AC6A-C3078585ECAB}
{065FEB4E-A99E-4A59-8112-1CB30CF794F9} = {5C915382-C886-457D-8641-9E766D8E5A17}
{4E17BE29-B227-41D8-97FE-26F674951E26} = {E409ADD3-9574-465C-AB09-4324D205CC7C}
{3B77F975-BF66-4218-9982-F48D3271DDFE} = {E409ADD3-9574-465C-AB09-4324D205CC7C}
Expand Down
57 changes: 26 additions & 31 deletions build/AssemblyRedirectionSourceGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,28 +5,31 @@

public static class AssemblyRedirectionSourceGenerator
{
public static void Generate(string assembliesFolderPath, string generatedFilePath)
public static void Generate(
string assembliesFolderPath,
string generatedFilePath,
Regex versionRegex,
Func<GroupCollection, string> versionNormalizer)
{
Log.Debug("Generating assembly redirection file {0}", generatedFilePath);

var macroName = Path.GetFileNameWithoutExtension(generatedFilePath).ToUpperInvariant();

var assemblies = new SortedDictionary<int, SortedDictionary<string, AssemblyNameDefinition>>();

var folders = new Dictionary<int, string>();

var frameworkVersionRegEx = new Regex(@"^net(?<version>\d{2,3})$");
// Discover framework-specific subfolders
foreach (var directory in Directory.EnumerateDirectories(assembliesFolderPath))
{
var folderName = Path.GetFileName(directory);
var framework = frameworkVersionRegEx.Match(folderName).Groups["version"].Value;
var framework = versionNormalizer(versionRegex.Match(folderName).Groups);
if (framework == string.Empty)
{
Log.Error("Unexpected folder name: {0}, will not be processed", framework);
continue;
}
var frameworkVersion = int.Parse(framework);
if (frameworkVersion < 100)
{
frameworkVersion *= 10;
}

if (folders.TryGetValue(frameworkVersion, out var folder))
{
Expand All @@ -49,7 +52,6 @@ void Process(string fileName, int? framework)
return;
}


foreach (var keys in framework != null ? (IEnumerable<int>)[framework.Value] : assemblies.Keys)
{
assemblies[keys][assemblyDef.Name] = assemblyDef;
Expand All @@ -63,11 +65,13 @@ void Process(string fileName, int? framework)
}
}

// Process common assemblies in root folder
foreach (var fileName in Directory.EnumerateFiles(assembliesFolderPath))
{
Process(fileName, null);
}

// Process framework-specific assemblies
foreach (var fx in folders)
{
foreach (var fileName in Directory.EnumerateFiles(fx.Value))
Expand All @@ -83,13 +87,13 @@ void Process(string fileName, int? framework)
}
}

var sourceContents = GenerateSourceContents(assemblies);
var sourceContents = GenerateSourceContents(assemblies, macroName);

File.WriteAllText(generatedFilePath, sourceContents);
Log.Information("Assembly redirection source generated {0}", generatedFilePath);
}

private static string GenerateSourceContents(SortedDictionary<int, SortedDictionary<string, AssemblyNameDefinition>> assemblies)
private static string GenerateSourceContents(SortedDictionary<int, SortedDictionary<string, AssemblyNameDefinition>> assemblies, string macroName)
{
#pragma warning disable format
return
Expand All @@ -101,25 +105,16 @@ private static string GenerateSourceContents(SortedDictionary<int, SortedDiction

// Auto-generated file, do not change it - generated by the {{nameof(AssemblyRedirectionSourceGenerator)}} type

#include "cor_profiler.h"

// Macro to handle cross-platform UTF-16 string literals
#ifdef _WIN32
#define STR(Z1) #Z1
#define AUTO_MAJOR STR(OTEL_AUTO_VERSION_MAJOR)

namespace trace
{
void CorProfiler::InitNetFxAssemblyRedirectsMap()
{
const USHORT auto_major = atoi(AUTO_MAJOR);

assembly_version_redirect_map_.insert({
{{GenerateEntries(assemblies)}}
});
}
}
#define _W(s) L##s
#else
#define _W(s) u##s
#endif

#define {{macroName}} \
{{GenerateEntries(assemblies)}}

""";
#pragma warning restore format
}
Expand All @@ -130,26 +125,26 @@ private static string GenerateEntries(SortedDictionary<int, SortedDictionary<str

foreach (var fx in frameworks)
{
sb.AppendLine($" {{ {fx.Key}, {{");
sb.AppendLine($" {{ {fx.Key}, {{ \\");
foreach (var kvp in fx.Value)
{
var v = kvp.Value.Version!;
if (kvp.Key != "OpenTelemetry.AutoInstrumentation")
{
sb.AppendLine($" {{ L\"{kvp.Key}\", {{{v.Major}, {v.Minor}, {v.Build}, {v.Revision}}} }},");
sb.AppendLine($" {{ _W(\"{kvp.Key}\"), {{{v.Major}, {v.Minor}, {v.Build}, {v.Revision}}} }}, \\");
}
else
{
sb.AppendLine($" {{ L\"{kvp.Key}\", {{auto_major, 0, 0, 0}} }},");
sb.AppendLine($" {{ _W(\"{kvp.Key}\"), {{auto_major, 0, 0, 0}} }}, \\");
}
}
sb.AppendLine(" }},");
sb.AppendLine(" }}, \\");
}

return sb.ToString()
.AsSpan() // Optimisation for following string manipulations
.Trim() // Remove whitespaces
.TrimEnd(',') // Remove trailing comma
.TrimEnd(", \\") // Remove trailing comma
.ToString();
}
}
2 changes: 1 addition & 1 deletion build/Build.NuGet.Steps.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ partial class Build
.Description("Build the NuGet packages that are generated directly from src/**/*.csproj files")
.Executes(() =>
{
foreach (var project in Solution.GetManagedSrcProjects().Where(p => !p.Name.EndsWith("AdditionalDeps") && !p.Name.Contains("Assemblies")))
foreach (var project in Solution.GetManagedSrcProjects().Where(p => !p.Name.EndsWith("Assemblies")))
{
DotNetPack(x => x
.SetProject(project)
Expand Down
37 changes: 5 additions & 32 deletions build/Build.Steps.Windows.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
using System;
using System.Collections.Generic;
using System.IO;
using Nuke.Common;
using Nuke.Common.IO;
using Nuke.Common.ProjectModel;
Expand All @@ -19,7 +16,7 @@ partial class Build
Target CompileNativeSrcWindows => _ => _
.Unlisted()
.After(CompileManagedSrc)
.After(GenerateNetFxAssemblyRedirectionSource)
.After(GenerateAssemblyRedirectionSource)
.OnlyWhenStatic(() => IsWin)
.Executes(() =>
{
Expand Down Expand Up @@ -74,7 +71,7 @@ static void SupportVs2026IfAvailable()
Target CompileNativeDependenciesForManagedTestsWindows => _ => _
.Unlisted()
.After(CompileManagedSrc)
.After(GenerateNetFxAssemblyRedirectionSource)
.After(GenerateAssemblyRedirectionSource)
.OnlyWhenStatic(() => IsWin)
.Executes(() =>
{
Expand Down Expand Up @@ -228,31 +225,6 @@ void BuildDockerImage(Project project, params string[] targets)
}
}

Target GenerateNetFxTransientDependencies => _ => _
.Unlisted()
.After(Restore)
.OnlyWhenStatic(() => IsWin)
.Executes(() =>
{
// The target project needs to have its NuGet packages restored prior to running the tool.
var targetProject = Solution.GetProjectByName(Projects.AutoInstrumentationNetFxAssemblies);
DotNetRestore(s => s.SetProjectFile(targetProject));

TransientDependenciesGenerator.Run(targetProject);
});

Target GenerateNetFxAssemblyRedirectionSource => _ => _
.Unlisted()
.After(PublishManagedProfiler)
.OnlyWhenStatic(() => IsWin)
.Executes(() =>
{
var netFxAssembliesFolder = TracerHomeDirectory / MapToFolderOutput(TargetFramework.NET462);
var generatedSourceFile = SourceDirectory / Projects.AutoInstrumentationNative / "netfx_assembly_redirection.h";

AssemblyRedirectionSourceGenerator.Generate(netFxAssembliesFolder, generatedSourceFile);
});

Target InstallNetFxAssembliesGAC => _ => _
.Unlisted()
.After(BuildTracer)
Expand All @@ -279,8 +251,9 @@ private void RunNetFxGacOperation(string operation)
}

// We assume that dev machine running test has .Net Framework not older than TargetFrameworksNetFx.Last()
var netFxCommonAssembliesFolder = TracerHomeDirectory / MapToFolderOutput(TargetFrameworksForNetFxPacking.Last());
var netFxAssembliesFolder = TracerHomeDirectory / MapToFolderOutputNetFx(TargetFrameworksForNetFxPacking.Last());
var lastFramework = TargetFrameworksForNetFxPacking.Last();
var netFxCommonAssembliesFolder = TracerHomeDirectory / lastFramework.OutputFolder;
var netFxAssembliesFolder = TracerHomeDirectory / lastFramework.OutputFolder / lastFramework;
var installTool = Solution.GetProjectByName(Projects.Tools.GacInstallTool);

DotNetRun(s => s
Expand Down
Loading
Loading