c # - Api Revit - fichier .csproj du plugin multi-version

Sep 22 2020

J'essaie de créer un simple hello Worldplug-in multi-version pour Revit et j'ai trouvé cet article que j'essaie de suivre. cependant, je ne vais pas très loin. Je ne suis pas très familier avec le fonctionnement du fichier .csproj. J'ai déjà créé des plugins pour des années Revit individuelles, mais pas pour plusieurs versions.

Voici mon code .csProj ci-dessous. J'essaie de commencer petit et de gérer .net framework 4.5.2 qui est Revit 2018. Vous trouverez également des extraits de code en bas pour les propriétés de mon projet. Il n'y a plus d'open pour Start External Application: donc je ne sais pas comment le déboguer via Revit.

Toute aide / direction est appréciée.

Avec le code .csproj actuel ci-dessous, j'obtiens cette erreur contextuelle:

.csproj

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFrameworks>net452<!--;net46;net47--></TargetFrameworks>
        <Configurations>Debug;Release</Configurations>
        <!--<Platforms>x64</Platforms>-->
        <OutputPath>bin\Debug\</OutputPath>
    </PropertyGroup>

    <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|Any CPU' ">      
        <DefineConstants>DEBUG</DefineConstants>
        <Optimize>false</Optimize>
        <OutputPath>bin\Debug\</OutputPath>

        <DebugType>full</DebugType>
        <DebugSymbols>true</DebugSymbols>
    </PropertyGroup>

    <PropertyGroup Condition="'$(Configuration)'=='Release'"> <PlatformTarget>x64</PlatformTarget> <DebugType>none</DebugType> <DebugSymbols>false</DebugSymbols> </PropertyGroup> <PropertyGroup Condition=" '$(TargetFramework)' == 'net452' ">
        <DefineConstants>$(DefineConstants);REVIT2018</DefineConstants> <!--<AssemblyName>helloWorld</AssemblyName>--> </PropertyGroup> <ItemGroup Condition=" '$(TargetFramework)' == 'net452' ">
        <!--<Reference Include="AdWindows">
            <HintPath>......\2018\AdWindows.dll</HintPath>
            <EmbedInteropTypes>false</EmbedInteropTypes>
            <Private>false</Private>
        </Reference>-->
        <Reference Include="RevitAPI">
            <HintPath>C:\Program Files\Autodesk\Revit 2018\RevitAPI.dll</HintPath>          
            <EmbedInteropTypes>false</EmbedInteropTypes>
            <Private>false</Private>
        </Reference>
        <Reference Include="RevitAPIUI">
            <HintPath>C:\Program Files\Autodesk\Revit 2018\RevitAPIUI.dll</HintPath>
            <EmbedInteropTypes>false</EmbedInteropTypes>
            <Private>false</Private>
        </Reference>
    </ItemGroup>

    <ItemGroup>
      <Reference Include="PresentationCore" />
      <Reference Include="System.Windows.Forms" />
    </ItemGroup>
</Project>

extraits de propriétés du projet

Réponses

Cflux Sep 22 2020 at 21:47

Merci à Ehsan pour le partage de son lien Github. J'ai pu le comprendre.

J'ai ajouté ces 2 lignes à mon groupe de propriétés avec le nom de l'assembly.

<TargetFrameworkProfile />
    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>

et ensuite ajouté ceux-ci ci-dessous dans des groupes de propriétés séparés qui semblent me permettre de les exécuter dans différentes versions. Je n'ai testé que 2018 et 2019 jusqu'à présent, mais cela semble prometteur.

<PropertyGroup Condition="$(Configuration.Contains('2018'))"> <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion> <RevitVersion>2018</RevitVersion> </PropertyGroup> <PropertyGroup Condition="$(Configuration.Contains('2019'))">
    <TargetFrameworkVersion>v4.7</TargetFrameworkVersion>
    <RevitVersion>2019</RevitVersion>
  </PropertyGroup>
  <PropertyGroup Condition="$(Configuration.Contains('2020'))"> <TargetFrameworkVersion>v4.7</TargetFrameworkVersion> <RevitVersion>2020</RevitVersion> </PropertyGroup> <PropertyGroup Condition="$(Configuration.Contains('2021'))">
    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
    <RevitVersion>2021</RevitVersion>
  </PropertyGroup>
ThếLong Oct 07 2020 at 16:52

Grâce à votre message, j'ai appris quelque chose sur le plug-in multi version. Maintenant, pour la question directe, vous pouvez déboguer votre bibliothèque de classes en démarrant Revit lorsque vous démarrez le processus de débogage. Et le réglage est le suivant:

  1. définir votre projet en tant que projet de démarrage (clic droit sur le projet sur le panneau "Exploration de solution" => Définir comme projet de démarrage) afin qu'il soit le premier projet à exécuter lors du débogage

  2. Ouvrez l'onglet "Propriétés du projet", sélectionnez "Déboguer"

  3. Dans "Démarrer l'action" sur le débogage, choisissez "Démarrer le programme externe". puis cliquez sur le bouton "Parcourir" pour sélectionner le fichier exécutable pour Revit. Par défaut, il devrait être à:

    C: \ Program Files \ Autodesk \ votre_version_of_revit

  4. Enregistrez le processus, générez le projet et appuyez sur F5 (ou quelle que soit la clé que vous avez définie pour le débogage)

C'est un peu tard car vous résolvez déjà votre problème, mais j'espère que cela pourra être utile dans une situation similaire.