箭头_Row 发表于 2025-3-29 23:27:14

Ifox由0.7.2版本升級至0.9.3版本的過程操作

本帖最后由 箭头_Row 于 2025-3-30 02:07 编辑

最近將Ifox由0.7.2版本升級至0.9.3版本,編譯中遇到的問題修復及過程如下:
備註:紅色部份為0.7.2代碼,黑色部份為0.9.3新加代碼。

Step01:修改.csproj文件。
一、支持多版本
<TargetFrameworks>Net48;Net80-windows</TargetFrameworks>
二、更改輸出添加版本框架文件夾
<AppendTargetFrameworkToOutputPath>true</AppendTargetFrameworkToOutputPath>
三、添加多版本編譯Condition
<PropertyGroup Condition="'$(TargetFramework)' == 'NET48'">
    <DefineConstants>$(Configuration);acad2024</DefineConstants>
</PropertyGroup>

<PropertyGroup Condition="'$(TargetFramework)' == 'Net80-windows'">
    <DefineConstants>$(Configuration);acad2025</DefineConstants>
    <EnableDynamicLoading>true</EnableDynamicLoading>
</PropertyGroup>
四、添加ifox0.9.3
<ItemGroup>
    <PackageReference Include="IFox.CAD.ACAD" Version="0.9.3-preview4" />
    <PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
    <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
    <PackageReference Include="Z.ExtensionMethods" Version="2.1.1" />
    <PackageReference Include="System.Data.SQLite.Core" Version="1.0.119" />
</ItemGroup>

Step02:修改DBTrans.Top。
DBTrans acTrans = DBTrans.Top;
DBTrans acTrans = DBTrans.GetTop();

Step03:修改Keywords.**.GetDesc();
private string _visibility = Keywords.二个直角.GetDesc();
private string _visibility = Keywords.二个直角.GetDescription();

Step04:修改動態塊屬性可見性函數名稱;
br.ChangeDynamicBlockProperty(pro);
br.ChangeBlockProperty(pro);

Step05:修改jig.Entitys的複數錯誤;
if (jig.Entitys.Length <= 0)
if (jig.Entities.Length <= 0)

Step06:取消jig設置的正交形參;
moveJig.SetOptions(basePoint, msg: "指定尺寸线位置", orthomode: false);
moveJig.SetOptions(basePoint, msg: "指定尺寸线位置");

Step07:高版本取消jig拖拽的this關鍵字,提示過時;
var prDrag = moveJig.Drag();
var prDrag = Env.Editor.Drag(moveJig);

Step08: TypedValueList已更改為protect;
             TypedValueList values =
                new()
            //TypedValueList values = new()
            //{
            //    { (int)DxfCode.ExtendedDataRegAppName, regAppName },
            //    { (int)DxfCode.ExtendedDataAsciiString, newInfo },
            //};
            //id.AddXData(regAppName, values); // 为实体添加应用程序名的扩展数据

            // 2025-03-26此处修改为ifox 0.9提供的方法
            using RegAppTable regTable = (RegAppTable)id.Database.RegAppTableId.GetObject(OpenMode.ForWrite);
            //如里不存在名为regAppName的记录,则创建新的注册应用程序表记录
            if (!regTable.Has(regAppName))
            {
                RegAppTableRecord regRecord = new()
                {
                  { (int)DxfCode.ExtendedDataRegAppName, regAppName },
                  { (int)DxfCode.ExtendedDataAsciiString, newInfo },
                };

            id.AddXData(regAppName, values); // 为实体添加应用程序名的扩展数据
                  Name = regAppName, // 设置扩展数据的名字
                }; // 创建一个注册应用程序表记录用来表示扩展数据

                regTable.Add(regRecord); // 在注册应用程序表加入扩展数据,并通知事务处理
                id.Database.TransactionManager.AddNewlyCreatedDBObject(regRecord, true);
            }

            using var ent = tr.GetObject(id, OpenMode.ForWrite);
            using var _ = ent.XData = new XDataList()
            {
                { (int)DxfCode.ExtendedDataRegAppName, regAppName },
                { (int)DxfCode.ExtendedDataAsciiString, newInfo },
            };
            regTable.DowngradeOpen();
            ent.DowngradeOpen();



d1742647821 发表于 前天 14:46

本帖最后由 d1742647821 于 2025-6-6 14:47 编辑

wyqzm 发表于 2025-5-26 10:42
明白了,命令行“dotnet new install IFoxCad.Templates”可以装0.7.2版本,这个版本支持cad2013-2026,那 ...
nuget搜索ifox.cad.Acad就有0.9.x版本,已经不再支持2012以下,如果有需求可以将项目fork到自己的仓库自行修改源码进行适配

箭头_Row 发表于 2025-3-29 23:28:20

本帖最后由 箭头_Row 于 2025-3-30 01:27 编辑

Step09: 取消無效的global引用;
global using System.Web.Script.Serialization;
//global using System.Web.Script.Serialization;

Step10: 0.9.3取消了函数.OfType<BlockReference>();
      // 遍歷單行文字
      var ids = psr.Value.GetObjectIds().OfType<DBText>();

      // 过滤出單行文字 & 屬性塊
      var allowType01 = RXObject.GetClass(typeof(DBText));
      var allowType02 = RXObject.GetClass(typeof(BlockReference));
      var ids = psr
            .Value.GetObjectIds()
            .Where(objId =>
                objId.ObjectClass.IsDerivedFrom(allowType01) || objId.ObjectClass.IsDerivedFrom(allowType02)
            );

Step11: 更改文檔鎖定提示字;
using DBTrans tr = new(doclock: true); // 不锁定提示错误:elnvalidInput
using DBTrans tr = new(docLock: true); // 不锁定提示错误:elnvalidInput

Step12: 更改塊屬性字典值形參類型為Dictionary<string, object> ;
Dictionary<string, string> pro = new()
Dictionary<string, object> pro = new()
{
    ["家具平面布置图"] = item,
    ["10~11F-01"] = GetCategoryByArDescription<StatusKv>(item) + "-01",
};

newBr.ChangeBlockProperty(pro); // 更新普通块的属性值

Step13: AcadPreferencesDisplay com接口名稱變更;
#if acad2025
    public AcadApplication? Application => null;
#else
    public IAcadApplication? Application => null;
#endif

Step14: 0.9.3取消了MathEx類,暫不知更改為哪個函數,故手動添加MathEx類;
public static class MathEx
{
    // todo:2025-03-26取消此方法,使用Math.PI
    /// <summary>
    /// 转换弧度到角度
    /// </summary>
    /// <param name="rad">弧度值</param>
    /// <returns>角度(10进制小数)</returns>
    public static double ConvertRadToDeg(double rad) => rad / Math.PI * 180;

    /// <summary>
    /// 转换角度(10进制小数)到弧度
    /// </summary>
    /// <param name="deg">角度</param>
    /// <returns>弧度</returns>
    public static double ConvertDegToRad(double deg) => deg / 180 * Math.PI;
}

你有种再说一遍 发表于 2025-5-26 18:44:47

wyqzm 发表于 2025-5-26 10:42
明白了,命令行“dotnet new install IFoxCad.Templates”可以装0.7.2版本,这个版本支持cad2013-2026,那 ...

如果你的需要扩展到Acad2008,那么你需要源码使用,
在IFox工程下面用jing分支,就是08起步的.
08除了缺少重定义等功能,还有块表索引器读取id.IsErased的bug,需要改为遍历.

箭头_Row 发表于 3 天前

本帖最后由 箭头_Row 于 2025-6-5 22:34 编辑

wyqzm 发表于 2025-5-26 10:42
明白了,命令行“dotnet new install IFoxCad.Templates”可以装0.7.2版本,这个版本支持cad2013-2026,那 ...
0.7.2版本不支持2025、2026,從ifox0.9.*版本才開始支持net8.0版本。

https://www.kdocs.cn/l/cc6ZXSa0vMgD
1.2 AutoCAD 各版本关系、Visual Studio 版本兼容性

箭头_Row 发表于 2025-3-29 23:35:34

本帖最后由 箭头_Row 于 2025-3-30 01:16 编辑

NET8.0的支持路徑書寫如下:

箭头_Row 发表于 2025-3-29 23:39:42

本帖最后由 箭头_Row 于 2025-3-30 01:16 编辑

NET4.8的支持路徑書寫如下:

箭头_Row 发表于 2025-3-29 23:52:03

本帖最后由 箭头_Row 于 2025-3-30 01:54 编辑

文件輸出優化:設置輸出文件夾名稱及SQLite仅输出win-x64引用的設置。

箭头_Row 发表于 2025-3-30 01:47:11

本帖最后由 箭头_Row 于 2025-3-30 01:52 编辑

Dll引用優化:AcMPolygonMGD.dll引用禁止複製至輸出文件夾下。

leedun 发表于 2025-3-31 10:44:18

前来支持,感谢分享

NetBee 发表于 2025-4-7 17:23:59

支持分享,一直在用Ifox

wyqzm 发表于 2025-5-26 08:37:29

nuget获得的是0.5.2.4,不支持autocad 2025及以上,如何获取更新的版本?

wyqzm 发表于 2025-5-26 10:42:00

明白了,命令行“dotnet new install IFoxCad.Templates”可以装0.7.2版本,这个版本支持cad2013-2026,那么,如何能集合起来,支持2008-2026呢?
页: [1] 2
查看完整版本: Ifox由0.7.2版本升級至0.9.3版本的過程操作