Process a project targeting multiple frameworks
Published 09 January 2020
If your project targets multiple frameworks with <TargetFrameworks> property, it is recommended to create separate SmartAssembly projects for each target assembly.
Let's say you have a project targeting three different frameworks:
<!-- ProjectA.csproj -->
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netcoreapp3.1;net472;netstandard2.1</TargetFrameworks>
</PropertyGroup>
</Project>For the project above you might want to create separate SmartAssembly projects, each pointing to the appropriate input assembly:
- ProjectA_netcoreapp3.1.saproj -
/ProjectA/bin/Release/netcoreapp3.1/ProjectA.dll - ProjectA_net472.saproj -
/ProjectA/bin/Release/net472/ProjectA.dll - ProjectA_netstandard2.1.saproj -
/ProjectA/bin/Release/netstandard2.1/ProjectA.dll
Then, you need to add the following code to your .csproj file to point SmartAssembly MSBuild task to correct project for each target framework:
<!-- ProjectA.csproj -->
<Project Sdk="Microsoft.NET.Sdk">
...
<Target Name="SetSmartAssemblyProjectPathForEachTarget" BeforeTargets="BuildWithSmartAssembly">
<PropertyGroup>
<SmartAssemblyProjectFile>$(MSBuildProjectDirectory)\$(AssemblyName)_$(TargetFramework).saproj</SmartAssemblyProjectFile>
</PropertyGroup>
<Message Importance="High" Text="SmartAssembly project for '$(TargetFramework)' set to: $(SmartAssemblyProjectFile)" />
</Target>
</Project>