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 于 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-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;
}
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 于 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-30 01:16 编辑
NET8.0的支持路徑書寫如下:
本帖最后由 箭头_Row 于 2025-3-30 01:16 编辑
NET4.8的支持路徑書寫如下: 本帖最后由 箭头_Row 于 2025-3-30 01:54 编辑
文件輸出優化:設置輸出文件夾名稱及SQLite仅输出win-x64引用的設置。
本帖最后由 箭头_Row 于 2025-3-30 01:52 编辑
Dll引用優化:AcMPolygonMGD.dll引用禁止複製至輸出文件夾下。 前来支持,感谢分享 支持分享,一直在用Ifox nuget获得的是0.5.2.4,不支持autocad 2025及以上,如何获取更新的版本? 明白了,命令行“dotnet new install IFoxCad.Templates”可以装0.7.2版本,这个版本支持cad2013-2026,那么,如何能集合起来,支持2008-2026呢?
页:
[1]
2