М... похоже, что можно

В \Classes\SysCompileIL\generateIncrementalIL есть такой код:
X++:
// Dump incremental xml files
changeFound = !dumpChanges || SysCompileIL::dumpIncrementalBulk();
if(changeFound)
{
AppVersionStr = ApplicationVersion::applBuildNo();
AppVersion = new System.Version(AppVersionStr);
xppILAppDomain = xApplication::XppILAppDomain();
parameters = new Microsoft.Dynamics.Ax.Xpp.GeneratorParameters();
parameters.set_AppVersion(AppVersion);
parameters.set_AssemblyName(#XppDllName);
parameters.set_EnableDebugging(true);
parameters.set_EnumFile(xmlPath + '\\Enums.exml');
parameters.set_NumberOfModules(#NumberOfModules);
parameters.set_WritePath(writePath);
parameters.set_XmlPath(xmlPath);
parameters.set_OldAssemblyName(xppAssemblyPath);
parameters.set_GeneratorAppDomain(xppILAppDomain);
parameters.set_IsDebug(Debug::isDebugOnAOSEnabled());
parameters.set_LogFolderPath(writePath);
modifiedModules = Microsoft.Dynamics.Ax.Xpp.XppILGenerator::GenerateIncrementalAssembly(parameters);
Здесь видно, как собственно запускается инкрементная компиляция. А вот в вызываемом методе SysCompileIL::dumpIncrementalBulk() есть такие интересные строчки:
X++:
SysModelElement sysModelElementChildren, sysModelElementSameBucket;
SysModelElementData sysModelElementData;
SysCompileILTable sysCompileILTable, sysCompileILTableSelfJoin;
// insert any type that has changed.
insert_recordset sysCompileILTableSelfJoin(Name, ModelElement, ElementType, AxId, GenerateType)
select Name, RecId, ElementType, AxId, generateType from sysModelElementSameBucket
exists join sysModelElementChildren where sysModelElementChildren.ParentModelElement == sysModelElementSameBucket.RecId
&& (sysModelElementChildren.ElementType == UtilElementType::ClassInstanceMethod
|| sysModelElementChildren.ElementType == UtilElementType::ClassStaticMethod
|| sysModelElementChildren.ElementType == UtilElementType::TableInstanceMethod
|| sysModelElementChildren.ElementType == UtilElementType::TableStaticMethod
|| sysModelElementChildren.ElementType == UtilElementType::TableRelation
|| sysModelElementChildren.ElementType == UtilElementType::TableField)
exists join sysModelElementData where sysModelElementData.ModelElement == sysModelElementChildren.RecId && sysModelElementData.ModifiedDateTime >= modifiedDateTime;
// Insert types in same bucket as types that changed
update_recordset sysCompileILTableSelfJoin setting NetModuleId = (sysCompileILTableSelfJoin.AxId / #GroupSize) mod #NumberOfModules;
insert_recordset sysCompileILTable(Name, ModelElement, ElementType, AxId, GenerateType)
select Name, RecId, ElementType, AxId, generateType from sysModelElementSameBucket
where sysModelElementSameBucket.ElementType == UtilElementType::Class || sysModelElementSameBucket.ElementType == UtilElementType::Table
exists join sysCompileILTableSelfJoin where sysCompileILTableSelfJoin.NetModuleId == (sysModelElementSameBucket.AxId / #GroupSize) mod #NumberOfModules;
Самое интересное тут - установка поля
SysCompileILTable.
NetModuleId:
X++:
update_recordset sysCompileILTableSelfJoin setting NetModuleId = (sysCompileILTableSelfJoin.AxId / #GroupSize) mod #NumberOfModules;
Используемые при его вычислении макросы #GroupSize и #NumberOfModules определены в \Macros\XppIL:
X++:
#define.NumberOfModules(1000)
#define.GroupSize(10)