C# - Revit API - 多版本插件 .csproj 文件

3

我正在尝试创建一个简单的多版本 Revit 插件,想要实现的功能是输出 Hello World,并且我发现了这篇文章,试着跟着做。但我一直无法成功。我不太熟悉 .csproj 文件的工作方式。以前我为单个 Revit 版本创建过插件,但没有制作过多版本的。

以下是我的 .csProj 代码。我试图从小处开始,只处理 .net framework 4.5.2,也就是 Revit 2018。在底部还可以找到我的项目属性片段。现在已经不再有“启动外部应用程序”的选项,所以我不知道该如何通过 Revit 进行调试。

感激任何帮助和指导。

使用下面的 .csproj 代码时,我得到了这个弹出错误:

enter image description here

.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>

项目属性片段 在此输入图片描述 在此输入图片描述 在此输入图片描述


2
以此为例,按照以下方式设置:https://github.com/McCulloughRT/Revit2glTF/blob/master/glTFRevitExport/glTFRevitExport.csproj - Ehsan Iran-Nejad
@EhsanIran-Nejad,你在项目属性中的目标框架有什么?我已经按照你提供的链接,在我的.csproj文件中<AssemblyName>标签下删除了<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>行,但是项目属性现在默认为.net framework 4.0。 - Cflux
1
@EhsanIran-Nejad,搞定了!谢谢。 - Cflux
1
如果你已经解决了问题,能否与我们分享解决方案?谢谢! - Jeremy Tammik
@EhsanIran-Nejad或JeremyTammik,有没有关于如何调试多版本插件的建议? - Cflux
2个回答

1
感谢您的帖子,我学到了一些关于多版本插件的知识。现在,对于直接的问题,您可以在启动调试过程时启动Revit来调试您的类库。设置如下:
  1. 将您的项目设置为启动项目(在“解决方案资源管理器”面板上右键单击项目 => 设置为启动项目),这样它将是第一个运行的项目

  2. 打开“项目属性”选项卡,选择“调试”

  3. 从调试中的“启动操作”中选择“启动外部程序”。然后点击“浏览”按钮选择Revit的可执行文件。默认情况下,它应该在:

    C:\Program Files\Autodesk\your_version_of_revit

  4. 保存进程,构建项目并按F5(或您设置的其他键)进行调试

由于您已经解决了您的问题,这有点晚了,但希望它能在某些类似的情况下有所帮助。

1
感谢 Ehsan 分享他的 Github 链接,我得以解决问题。
我在我的属性组中添加了这两行代码,包括程序集名称。
<TargetFrameworkProfile />
    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>

然后我将它们添加到不同的属性组中,似乎可以让我在不同版本中运行它们。到目前为止,我只测试了2018和2019,但看起来很有前途。

<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>

1
正如您在先前的评论中所看到的示例csproj文件中所示,您可以在其余的csproj中使用“RevitVersion”值来实现动态构建路径,...这些路径会在更改构建配置文件时自动设置。 - Ehsan Iran-Nejad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接