I'd like to make a contribution here, because after a lot of searching on this forum and also on @Jeremmy's blog, I finally found a Visua Studio solution that works for Revit versions 2021->2024 using framework 4.8 and for version 2025 using framework 8.0.
In one solution, I have a license generator project and the Revit plugin project.
Here's a preview of my .sln file
What you need to understand is that I have as many Release as Debug in each version of Revit. This information is then found in the plugin project configuration file, which has the .csproj extension. The Release is used to compile the plugin dll and its dependencies for use. I use Debug mode when I'm using the invaluable AddInManager.
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug 2021|Any CPU = Debug 2021|Any CPU
Debug 2021|x64 = Debug 2021|x64
Debug 2022|Any CPU = Debug 2022|Any CPU
Debug 2022|x64 = Debug 2022|x64
Debug 2023|Any CPU = Debug 2023|Any CPU
Debug 2023|x64 = Debug 2023|x64
Debug 2024|Any CPU = Debug 2024|Any CPU
Debug 2024|x64 = Debug 2024|x64
Debug 2025|Any CPU = Debug 2025|Any CPU
Debug 2025|x64 = Debug 2025|x64
Release 2021|Any CPU = Release 2021|Any CPU
Release 2021|x64 = Release 2021|x64
Release 2022|Any CPU = Release 2022|Any CPU
Release 2022|x64 = Release 2022|x64
Release 2023|Any CPU = Release 2023|Any CPU
Release 2023|x64 = Release 2023|x64
Release 2024|Any CPU = Release 2024|Any CPU
Release 2024|x64 = Release 2024|x64
Release 2025|Any CPU = Release 2025|Any CPU
Release 2025|x64 = Release 2025|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2021|Any CPU.ActiveCfg = Debug 2021|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2021|Any CPU.Build.0 = Debug 2021|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2021|x64.ActiveCfg = Debug 2021|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2021|x64.Build.0 = Debug 2021|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2022|Any CPU.ActiveCfg = Debug 2022|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2022|Any CPU.Build.0 = Debug 2022|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2022|x64.ActiveCfg = Debug 2022|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2022|x64.Build.0 = Debug 2022|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2023|Any CPU.ActiveCfg = Debug 2023|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2023|Any CPU.Build.0 = Debug 2023|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2023|x64.ActiveCfg = Debug 2023|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2023|x64.Build.0 = Debug 2023|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2024|Any CPU.ActiveCfg = Debug 2024|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2024|Any CPU.Build.0 = Debug 2024|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2024|x64.ActiveCfg = Debug 2024|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2024|x64.Build.0 = Debug 2024|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2025|Any CPU.ActiveCfg = Debug 2025|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2025|Any CPU.Build.0 = Debug 2025|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2025|x64.ActiveCfg = Debug 2025|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Debug 2025|x64.Build.0 = Debug 2025|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2021|Any CPU.ActiveCfg = Release 2021|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2021|Any CPU.Build.0 = Release 2021|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2021|x64.ActiveCfg = Release 2021|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2021|x64.Build.0 = Release 2021|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2022|Any CPU.ActiveCfg = Release 2022|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2022|Any CPU.Build.0 = Release 2022|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2022|x64.ActiveCfg = Release 2022|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2022|x64.Build.0 = Release 2022|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2023|Any CPU.ActiveCfg = Release 2023|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2023|Any CPU.Build.0 = Release 2023|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2023|x64.ActiveCfg = Release 2023|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2023|x64.Build.0 = Release 2023|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2024|Any CPU.ActiveCfg = Release 2024|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2024|Any CPU.Build.0 = Release 2024|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2024|x64.ActiveCfg = Release 2024|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2024|x64.Build.0 = Release 2024|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2025|Any CPU.ActiveCfg = Release 2025|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2025|Any CPU.Build.0 = Release 2025|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2025|x64.ActiveCfg = Release 2025|Any CPU
{9DB9E599-B676-4BA4-BA5B-C6A6E1A644FD}.Release 2025|x64.Build.0 = Release 2025|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2021|Any CPU.ActiveCfg = Debug|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2021|Any CPU.Build.0 = Debug|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2021|x64.ActiveCfg = Debug|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2021|x64.Build.0 = Debug|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2022|Any CPU.ActiveCfg = Debug|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2022|Any CPU.Build.0 = Debug|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2022|x64.ActiveCfg = Debug|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2022|x64.Build.0 = Debug|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2023|Any CPU.ActiveCfg = Debug|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2023|Any CPU.Build.0 = Debug|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2023|x64.ActiveCfg = Debug|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2023|x64.Build.0 = Debug|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2024|Any CPU.ActiveCfg = Debug|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2024|Any CPU.Build.0 = Debug|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2024|x64.ActiveCfg = Debug|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2024|x64.Build.0 = Debug|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2025|Any CPU.ActiveCfg = Debug|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2025|Any CPU.Build.0 = Debug|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2025|x64.ActiveCfg = Debug|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Debug 2025|x64.Build.0 = Debug|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2021|Any CPU.ActiveCfg = Release|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2021|Any CPU.Build.0 = Release|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2021|x64.ActiveCfg = Release|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2021|x64.Build.0 = Release|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2022|Any CPU.ActiveCfg = Release|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2022|Any CPU.Build.0 = Release|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2022|x64.ActiveCfg = Release|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2022|x64.Build.0 = Release|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2023|Any CPU.ActiveCfg = Release|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2023|Any CPU.Build.0 = Release|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2023|x64.ActiveCfg = Release|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2023|x64.Build.0 = Release|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2024|Any CPU.ActiveCfg = Release|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2024|Any CPU.Build.0 = Release|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2024|x64.ActiveCfg = Release|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2024|x64.Build.0 = Release|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2025|Any CPU.ActiveCfg = Release|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2025|Any CPU.Build.0 = Release|Any CPU
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2025|x64.ActiveCfg = Release|x64
{A9818572-9EC6-4536-A383-2370C9D0AFB0}.Release 2025|x64.Build.0 = Release|x64
EndGlobalSection
Next, we configure the csproj file.
We find this first section
<Project Sdk="Microsoft.NET.Sdk" ToolsVersion="Current">
<PropertyGroup>
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>
<PlatformTarget>x64</PlatformTarget>
<OutputType>Library</OutputType>
<RootNamespace>SuezTools</RootNamespace>
<AssemblyName>SuezTools</AssemblyName>
<LangVersion>latest</LangVersion>
<Nullable>disable</Nullable>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<ImplicitUsings>enable</ImplicitUsings>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
<Configurations>
Debug 2021;Debug 2022;Debug 2023;Debug 2024;Debug 2025;
Release 2021;Release 2022;Release 2023;Release 2024;Release 2025
</Configurations>
</PropertyGroup>
If you use WPF forms and Windows forms, write this
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>
If you're project will be a dll for Revit use this
<OutputType>Library</OutputType>
Framework 8 is more demanding in terms of coding rules, so if you want to be able to declare variables without having to avoid null variables, if you want to generate your own AssemblyInfo.cs file (which contains global variables such as version numbers, copyright, etc.), if you want to use implicit declarations of your using, then write this
<Nullable>disable</Nullable>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<ImplicitUsings>enable</ImplicitUsings>
Finally, for each Revit version (Debug or Release) to which you compile, you must define the version type, the framework type and also, and above all, for framework 8, force the Windows platform, as the framework now supports more platforms and you risk getting warnings
<PropertyGroup Condition="$(Configuration.Contains('Debug'))">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<DefineConstants>$(DefineConstants);DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('Release'))">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<DefineConstants>$(DefineConstants);TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('2021'))">
<RevitVersion>2021</RevitVersion>
<TargetFramework>net48</TargetFramework>
<DefineConstants>$(DefineConstants);REVIT2021</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('2022'))">
<RevitVersion>2022</RevitVersion>
<TargetFramework>net48</TargetFramework>
<DefineConstants>$(DefineConstants);REVIT2022</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('2023'))">
<RevitVersion>2023</RevitVersion>
<TargetFramework>net48</TargetFramework>
<DefineConstants>$(DefineConstants);REVIT2023</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('2024'))">
<RevitVersion>2024</RevitVersion>
<TargetFramework>net48</TargetFramework>
<DefineConstants>$(DefineConstants);REVIT2024</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="$(Configuration.Contains('2025'))">
<RevitVersion>2025</RevitVersion>
<TargetFramework>net8.0-windows</TargetFramework>
<DefineConstants>$(DefineConstants);TRACE;REVIT2025</DefineConstants>
<SupportedOSPlatform>windows</SupportedOSPlatform>
<SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>
<EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
Next, here's how I managed my dependencies:
For each framework, I indicated the dependencies I wanted
for the 4.8 framework, I've always used direct dependencies, and I choose which ones are local copies or not (like here Standard.Licensing for license management)
For Office.Interop.Excel, Word or Outlook dependencies, I've declared them as COM. By using a COM reference, you enable your .NET application to interact directly with Excel's COM components, which is more reliable in certain contexts. And it saved me from execution errors in Revit.
Here's an example for the Revit 2021->2024 section...
<!-- Références pour les versions Revit 2021-2024 (.NET Framework 4.8) -->
<ItemGroup Condition="$(Configuration.Contains('2021')) Or $(Configuration.Contains('2022')) Or $(Configuration.Contains('2023')) Or $(Configuration.Contains('2024'))">
<!-- Ajoutez ici toutes les autres références spécifiques au .NET Framework 4.8 -->
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="Standard.Licensing">
<HintPath>..\packages\Standard.Licensing.1.2.0\lib\net461\Standard.Licensing.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Management" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xaml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="WindowsBase" />
<COMReference Include="Microsoft.Office.Interop.Outlook">
<Guid>{00062FFF-0000-0000-C000-000000000046}</Guid>
<VersionMajor>9</VersionMajor>
<VersionMinor>6</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>primary</WrapperTool>
<Isolated>False</Isolated>
<EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
Depending on the version of Revit you wish to compile, this group allows you to go directly to the 4 Revit dlls you need.
<!-- Autres références Revit si nécessaire -->
<Reference Include="RevitAPI">
<HintPath>C:\Program Files\Autodesk\Revit $(RevitVersion)\RevitAPI.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="RevitAPIUI">
<HintPath>C:\Program Files\Autodesk\Revit $(RevitVersion)\RevitAPIUI.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="AdWindows">
<HintPath>C:\Program Files\Autodesk\Revit $(RevitVersion)\AdWindows.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="UIFramework">
<HintPath>C:\Program Files\Autodesk\Revit $(RevitVersion)\UIFramework.dll</HintPath>
<Private>False</Private>
</Reference>
Finally, here's the section for the .net or 8.0 framework.
Here, dependencies are directly packages, and this is how the framework manages them.
<!-- PackageReferences pour Revit 2025 (.NET 8) -->
<ItemGroup Condition="$(Configuration.Contains('2025'))">
<!-- Ajoutez ici toutes les autres références spécifiques au .NET 8 -->
<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.0" />
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.1" />
<PackageReference Include="RestSharp" Version="112.0.0" />
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
<PackageReference Include="Microsoft.AspNetCore.SystemWebAdapters" Version="1.4.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="System.Management" Version="8.0.0" />
<PackageReference Include="Standard.Licensing" Version="1.2.0" />
<COMReference Include="Microsoft.Office.Interop.Excel">
<WrapperTool>tlbimp</WrapperTool>
<VersionMinor>9</VersionMinor>
<VersionMajor>1</VersionMajor>
<Guid>00020813-0000-0000-c000-000000000046</Guid>
<Lcid>0</Lcid>
<Isolated>false</Isolated>
<EmbedInteropTypes>true</EmbedInteropTypes>
</COMReference>

In the postBuldEvent, I copy all of my dll in the Revit Addins folder wich is in %Appdata% not ProgamData.
When I make a Debug version, I copy files in a Debug folder wich is used by the AddInManager.
<PostBuildEvent>
echo ______________
echo PostBuildEvent
:: __________________FICHIER ADDIN_______________________________________
echo Copie fichier .addIn
copy "$(ProjectDir)*.addin" "$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)" /y
:: _________________FICHIERS JSON______________________________________________
echo Copie fichiers json
copy "$(ProjectDir)*.json" "$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)\$(AssemblyName)" /y
copy "$(ProjectDir)*.json" "$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)\Debug" /y
:: _________________FICHIERS md______________________________________________
echo Copie fichier md de la solution dans le dossier "$(SolutionDir)LastBuild"
copy "$(SolutionDir)README.md" "$(SolutionDir)\LastBuild" /y
:: ____________________DLL DEPENDANCES_REPERTOIRE ADDINS___________________
echo Copie des dll et des pdb dans "$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)"
copy "$(ProjectDir)$(OutDir)*.dll" "$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)\$(AssemblyName)" /y
copy "$(ProjectDir)$(OutDir)*.pdb" "$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)\$(AssemblyName)" /y
:: _____________DLL DEPENDANCES_REPERTOIRE DEBUG AIM___________________
echo Copie des dll et des pdb dans "$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)\Debug"
copy "$(ProjectDir)$(OutDir)*.dll" "$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)\Debug" /y
copy "$(ProjectDir)$(OutDir)*.pdb" "$(AppData)\Autodesk\Revit\Addins\$(RevitVersion)\Debug" /y
</PostBuildEvent>
By th way, I used modeless forms and if you want to debug your code with the AddInManager, we must preload external assemblies in Debug Mode. So, before the Excecute method, put this
#if DEBUG
// Préchargement des assemblages
AssemblyLoader.PreloadAssemblies();
#endif
And load all dependencies you need for your code
public static class AssemblyLoader
{
public static void PreloadAssemblies()
{
try
{
System.Reflection.Assembly.Load("Standard.Licensing, Version=1.2.0.0");
System.Reflection.Assembly.Load("BouncyCastle.Cryptography, Version=2.4.0.0");
}
catch (Exception ex)
{
// Log l'erreur
System.Diagnostics.Debug.WriteLine($"Erreur lors du préchargement de l'assemblage : {ex.Message}");
}
}
}
Maybe there is an other best solution, but, for me, it works!
Hope it will help you!
Pierre NAVARRA
SONA-Architecture.
http://www.sona-architecture.com
https://fr.linkedin.com/in/pierre-navarra-62032a107