Projektdateien hinzufügen.

This commit is contained in:
mr_sc
2026-09-03 21:32:00 +02:00
parent 092c5fa09c
commit f6d0eaecaa
500 changed files with 115722 additions and 0 deletions

View File

@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net48</TargetFramework>
<LangVersion>latest</LangVersion>
<AssemblyName>IMSApiDotNet.LegacyBinarySmoke</AssemblyName>
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<!-- IMPORTANT: this executable is compiled against the untouched legacy DLL. -->
<Reference Include="IMSApiDotNet">
<HintPath>..\..\reference\IMSApiDotNet_10.0.0-3_original.dll</HintPath>
<Private>false</Private>
</Reference>
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net48" Version="1.0.3" PrivateAssets="all" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,80 @@
using System;
using System.Reflection;
using com.itac.mes.imsapi.client.dotnet;
internal static class Program
{
private static int Fail(string text)
{
Console.Error.WriteLine("ABI FAIL: " + text);
return 2;
}
private static int Main()
{
try
{
// This call is intentionally compiled against 10.0.0-3. The resulting EXE
// must run unchanged after IMSApiDotNet.dll is replaced by either new target.
IMSApiDotNet.setProperty("itac.appid", "LegacyBinarySmoke");
IMSApiDotNet a = IMSApiDotNet.loadLibrary();
IMSApiDotNet b = IMSApiDotNet.loadLibrary();
if (a == null || b == null) return Fail("loadLibrary returned null");
if (!object.ReferenceEquals(a, b)) return Fail("legacy singleton behavior changed");
string version = null;
int rc = a.imsapiGetLibraryVersion(ref version);
if (rc != IMSApiDotNetConstants.RES_OK) return Fail("imsapiGetLibraryVersion return code " + rc);
if (string.IsNullOrEmpty(version)) return Fail("empty library version");
// Reflection checks the declaring type and static/instance metadata that caused
// MissingMethodException in existing applications.
MethodInfo setProperty = typeof(IMSApiDotNetBase).GetMethod(
"setProperty",
BindingFlags.Public | BindingFlags.Static,
null,
new[] { typeof(string), typeof(string) },
null);
if (setProperty == null) return Fail("IMSApiDotNetBase.setProperty(string,string) static missing");
if (setProperty.ReturnType != typeof(void)) return Fail("setProperty return type changed");
if (setProperty.DeclaringType != typeof(IMSApiDotNetBase)) return Fail("setProperty declaring type changed");
MethodInfo loadLibrary = typeof(IMSApiDotNet).GetMethod(
"loadLibrary",
BindingFlags.Public | BindingFlags.Static,
null,
Type.EmptyTypes,
null);
if (loadLibrary == null || loadLibrary.ReturnType != typeof(IMSApiDotNet))
return Fail("IMSApiDotNet.loadLibrary() signature changed");
if (!typeof(IMSApiDotNetConstants).IsAssignableFrom(typeof(IMSApiDotNetBase)))
return Fail("IMSApiDotNetBase no longer derives from IMSApiDotNetConstants");
MethodInfo getError = typeof(IMSApiDotNetConstants).GetMethod(
"getIMSApiDotNetErrorText",
new[] { typeof(int) });
if (getError == null || getError.ReturnType != typeof(string))
return Fail("IMSApiDotNetConstants.getIMSApiDotNetErrorText(int) missing");
Console.WriteLine("ABI OK");
Console.WriteLine("Loaded: " + typeof(IMSApiDotNet).Assembly.FullName);
Console.WriteLine("Path: " + typeof(IMSApiDotNet).Assembly.Location);
Console.WriteLine("API: " + version);
return 0;
}
catch (MissingMethodException ex)
{
return Fail(ex.ToString());
}
catch (TypeLoadException ex)
{
return Fail(ex.ToString());
}
catch (Exception ex)
{
return Fail(ex.ToString());
}
}
}