From 25983c1ba9428c5cd8aabb1f81381c60378db9ab Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 20 Nov 2015 18:25:56 +0000 Subject: [PATCH] remove the hard to maintain Ode.Net wrapper only in use by old ode --- .../Region/PhysicsModules/Ode/ODECharacter.cs | 5 +- .../Region/PhysicsModules/Ode/ODEDynamics.cs | 2 +- .../Region/PhysicsModules/Ode/ODEModule.cs | 1 - OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs | 48 ++--- .../Ode/ODERayCastRequestManager.cs | 3 +- .../PhysicsModules/Ode/OdePhysicsJoint.cs | 2 - OpenSim/Region/PhysicsModules/Ode/OdeScene.cs | 164 +----------------- .../Region/PhysicsModules/Ode/drawstuff.cs | 98 ----------- bin/Ode.NET.dll | Bin 51200 -> 0 bytes bin/Ode.NET.dll.config | 7 - 10 files changed, 33 insertions(+), 297 deletions(-) delete mode 100644 OpenSim/Region/PhysicsModules/Ode/drawstuff.cs delete mode 100755 bin/Ode.NET.dll delete mode 100644 bin/Ode.NET.dll.config diff --git a/OpenSim/Region/PhysicsModules/Ode/ODECharacter.cs b/OpenSim/Region/PhysicsModules/Ode/ODECharacter.cs index c1afe13b8c..4c9df9c068 100644 --- a/OpenSim/Region/PhysicsModules/Ode/ODECharacter.cs +++ b/OpenSim/Region/PhysicsModules/Ode/ODECharacter.cs @@ -29,7 +29,6 @@ using System; using System.Collections.Generic; using System.Reflection; using OpenMetaverse; -using Ode.NET; using OpenSim.Framework; using OpenSim.Region.PhysicsModules.SharedBase; using log4net; @@ -1105,8 +1104,8 @@ namespace OpenSim.Region.PhysicsModule.ODE // lock (OdeScene.UniversalColliderSyncObject) Shell = d.CreateCapsule(_parent_scene.space, CAPSULE_RADIUS, CAPSULE_LENGTH); - d.GeomSetCategoryBits(Shell, (int)m_collisionCategories); - d.GeomSetCollideBits(Shell, (int)m_collisionFlags); + d.GeomSetCategoryBits(Shell, (uint)m_collisionCategories); + d.GeomSetCollideBits(Shell, (uint)m_collisionFlags); d.MassSetCapsuleTotal(out ShellMass, m_mass, 2, CAPSULE_RADIUS, CAPSULE_LENGTH); Body = d.BodyCreate(_parent_scene.world); diff --git a/OpenSim/Region/PhysicsModules/Ode/ODEDynamics.cs b/OpenSim/Region/PhysicsModules/Ode/ODEDynamics.cs index 8f8e2bde5d..739a7b3570 100644 --- a/OpenSim/Region/PhysicsModules/Ode/ODEDynamics.cs +++ b/OpenSim/Region/PhysicsModules/Ode/ODEDynamics.cs @@ -44,10 +44,10 @@ using System.Reflection; using System.Runtime.InteropServices; using log4net; using OpenMetaverse; -using Ode.NET; using OpenSim.Framework; using OpenSim.Region.PhysicsModules.SharedBase; + namespace OpenSim.Region.PhysicsModule.ODE { public class ODEDynamics diff --git a/OpenSim/Region/PhysicsModules/Ode/ODEModule.cs b/OpenSim/Region/PhysicsModules/Ode/ODEModule.cs index 101e8b019b..ed50de3635 100644 --- a/OpenSim/Region/PhysicsModules/Ode/ODEModule.cs +++ b/OpenSim/Region/PhysicsModules/Ode/ODEModule.cs @@ -6,7 +6,6 @@ using Mono.Addins; using OpenSim.Framework; using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Interfaces; -using Ode.NET; namespace OpenSim.Region.PhysicsModule.ODE { diff --git a/OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs b/OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs index 908b2663d8..82b0999b60 100644 --- a/OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs +++ b/OpenSim/Region/PhysicsModules/Ode/ODEPrim.cs @@ -48,7 +48,6 @@ using System.Runtime.InteropServices; using System.Threading; using log4net; using OpenMetaverse; -using Ode.NET; using OpenSim.Framework; using OpenSim.Region.PhysicsModules.SharedBase; @@ -359,12 +358,12 @@ namespace OpenSim.Region.PhysicsModule.ODE if (m_assetFailed) { d.GeomSetCategoryBits(prim_geom, 0); - d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits); + d.GeomSetCollideBits(prim_geom, (uint)BadMeshAssetCollideBits); } else { - d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); - d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); + d.GeomSetCategoryBits(prim_geom, (uint)m_collisionCategories); + d.GeomSetCollideBits(prim_geom, (uint)m_collisionFlags); } _parent_scene.geom_name_map[prim_geom] = Name; @@ -432,7 +431,7 @@ namespace OpenSim.Region.PhysicsModule.ODE if (m_assetFailed) { d.GeomSetCategoryBits(prim_geom, 0); - d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits); + d.GeomSetCollideBits(prim_geom, (uint)BadMeshAssetCollideBits); } else { @@ -440,8 +439,8 @@ namespace OpenSim.Region.PhysicsModule.ODE m_collisionFlags |= (CollisionCategories.Land | CollisionCategories.Wind); } - d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); - d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); + d.GeomSetCategoryBits(prim_geom, (uint)m_collisionCategories); + d.GeomSetCollideBits(prim_geom, (uint)m_collisionFlags); d.BodySetAutoDisableFlag(Body, true); d.BodySetAutoDisableSteps(Body, body_autodisable_frames); @@ -825,8 +824,8 @@ namespace OpenSim.Region.PhysicsModule.ODE } else { - d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); - d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); + d.GeomSetCategoryBits(prim_geom, (uint)m_collisionCategories); + d.GeomSetCollideBits(prim_geom, (uint)m_collisionFlags); } d.BodyDestroy(Body); @@ -859,8 +858,8 @@ namespace OpenSim.Region.PhysicsModule.ODE else { - d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); - d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); + d.GeomSetCategoryBits(prim_geom, (uint)m_collisionCategories); + d.GeomSetCollideBits(prim_geom, (uint)m_collisionFlags); } Body = IntPtr.Zero; @@ -1151,12 +1150,12 @@ Console.WriteLine("ZProcessTaints for " + Name); if (prm.m_assetFailed) { d.GeomSetCategoryBits(prm.prim_geom, 0); - d.GeomSetCollideBits(prm.prim_geom, prm.BadMeshAssetCollideBits); + d.GeomSetCollideBits(prm.prim_geom, (uint)prm.BadMeshAssetCollideBits); } else { - d.GeomSetCategoryBits(prm.prim_geom, (int)prm.m_collisionCategories); - d.GeomSetCollideBits(prm.prim_geom, (int)prm.m_collisionFlags); + d.GeomSetCategoryBits(prm.prim_geom, (uint)prm.m_collisionCategories); + d.GeomSetCollideBits(prm.prim_geom, (uint)prm.m_collisionFlags); } d.Quaternion quat = new d.Quaternion(); @@ -1200,14 +1199,14 @@ Console.WriteLine("ZProcessTaints for " + Name); if (m_assetFailed) { d.GeomSetCategoryBits(prim_geom, 0); - d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits); + d.GeomSetCollideBits(prim_geom, (uint)BadMeshAssetCollideBits); } else { //Console.WriteLine("GeomSetCategoryBits 2: " + prim_geom + " - " + (int)m_collisionCategories + " for " + Name); - d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); + d.GeomSetCategoryBits(prim_geom, (uint)m_collisionCategories); //Console.WriteLine(" Post GeomSetCategoryBits 2"); - d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); + d.GeomSetCollideBits(prim_geom, (uint)m_collisionFlags); } d.Quaternion quat2 = new d.Quaternion(); @@ -1377,8 +1376,8 @@ Console.WriteLine("ZProcessTaints for " + Name); } else { - d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); - d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); + d.GeomSetCategoryBits(prim_geom, (uint)m_collisionCategories); + d.GeomSetCollideBits(prim_geom, (uint)m_collisionFlags); } if (IsPhysical) @@ -1403,12 +1402,12 @@ Console.WriteLine("ZProcessTaints for " + Name); if (m_assetFailed) { d.GeomSetCategoryBits(prim_geom, 0); - d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits); + d.GeomSetCollideBits(prim_geom, (uint)BadMeshAssetCollideBits); } else { - d.GeomSetCategoryBits(prim_geom, (int)m_collisionCategories); - d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); + d.GeomSetCategoryBits(prim_geom, (uint)m_collisionCategories); + d.GeomSetCollideBits(prim_geom, (uint)m_collisionFlags); } if (IsPhysical) @@ -2135,10 +2134,10 @@ Console.WriteLine(" JointCreateFixed"); } if (m_assetFailed) - d.GeomSetCollideBits(prim_geom, BadMeshAssetCollideBits); + d.GeomSetCollideBits(prim_geom, (uint)BadMeshAssetCollideBits); else - d.GeomSetCollideBits(prim_geom, (int)m_collisionFlags); + d.GeomSetCollideBits(prim_geom, (uint)m_collisionFlags); } /// /// Change prim in response to a shape taint. @@ -2813,6 +2812,7 @@ Console.WriteLine(" JointCreateFixed"); d.BodySetLinearVel(Body, 0, 0, 0); disableBodySoft(); + _position = l_position; // tell framework to fix it if (_parent == null) base.RequestPhysicsterseUpdate(); diff --git a/OpenSim/Region/PhysicsModules/Ode/ODERayCastRequestManager.cs b/OpenSim/Region/PhysicsModules/Ode/ODERayCastRequestManager.cs index 61993872ae..e39b8c78cf 100644 --- a/OpenSim/Region/PhysicsModules/Ode/ODERayCastRequestManager.cs +++ b/OpenSim/Region/PhysicsModules/Ode/ODERayCastRequestManager.cs @@ -32,7 +32,6 @@ using System.Runtime.InteropServices; using System.Text; using OpenMetaverse; using OpenSim.Region.PhysicsModules.SharedBase; -using Ode.NET; using log4net; namespace OpenSim.Region.PhysicsModule.ODE @@ -358,7 +357,7 @@ namespace OpenSim.Region.PhysicsModule.ODE lock (contacts) { - count = d.Collide(g1, g2, contacts.GetLength(0), contacts, d.ContactGeom.SizeOf); + count = d.Collide(g1, g2, contacts.GetLength(0), contacts, d.ContactGeom.unmanagedSizeOf); } } catch (SEHException) diff --git a/OpenSim/Region/PhysicsModules/Ode/OdePhysicsJoint.cs b/OpenSim/Region/PhysicsModules/Ode/OdePhysicsJoint.cs index 2eb7ba634e..e2578be6c6 100644 --- a/OpenSim/Region/PhysicsModules/Ode/OdePhysicsJoint.cs +++ b/OpenSim/Region/PhysicsModules/Ode/OdePhysicsJoint.cs @@ -27,10 +27,8 @@ using System; using OpenMetaverse; -using Ode.NET; using OpenSim.Framework; using OpenSim.Region.PhysicsModules.SharedBase; -using OpenSim.Region.PhysicsModule.ODE; namespace OpenSim.Region.PhysicsModule.ODE { diff --git a/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs b/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs index 4e95b7a372..6f14121667 100644 --- a/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs +++ b/OpenSim/Region/PhysicsModules/Ode/OdeScene.cs @@ -31,9 +31,6 @@ // or application thread stack may just blowup // see RayCast(ODERayCastRequest req) -//#define USE_DRAWSTUFF -//#define SPAM - using System; using System.Collections.Generic; using System.Diagnostics; @@ -46,17 +43,12 @@ using System.Threading; using log4net; using Nini.Config; using Mono.Addins; -using Ode.NET; using OpenMetaverse; -#if USE_DRAWSTUFF -using Drawstuff.NET; -#endif using OpenSim.Framework; using OpenSim.Region.PhysicsModules.SharedBase; using OpenSim.Region.Framework.Scenes; using OpenSim.Region.Framework.Interfaces; - namespace OpenSim.Region.PhysicsModule.ODE { public enum StatusIndicators : int @@ -585,32 +577,12 @@ namespace OpenSim.Region.PhysicsModule.ODE d.WorldSetAutoDisableFlag(world, false); - #if USE_DRAWSTUFF - Thread viewthread = new Thread(new ParameterizedThreadStart(startvisualization)); - viewthread.Start(); - #endif - - // _watermap = new float[258 * 258]; +// _watermap = new float[258 * 258]; // Zero out the prim spaces array (we split our space into smaller spaces so // we can hit test less. } -#if USE_DRAWSTUFF - public void startvisualization(object o) - { - ds.Functions fn; - fn.version = ds.VERSION; - fn.start = new ds.CallbackFunction(start); - fn.step = new ds.CallbackFunction(step); - fn.command = new ds.CallbackFunction(command); - fn.stop = null; - fn.path_to_textures = "./textures"; - string[] args = new string[0]; - ds.SimulationLoop(args.Length, args, 352, 288, ref fn); - } -#endif - // Initialize from configs private void InitialiseFromConfig(IConfigSource config) { @@ -957,7 +929,7 @@ namespace OpenSim.Region.PhysicsModule.ODE /// /// private int CollideGeoms( - IntPtr geom1, IntPtr geom2, int maxContacts, Ode.NET.d.ContactGeom[] contactsArray, int contactGeomSize) + IntPtr geom1, IntPtr geom2, int maxContacts, d.ContactGeom[] contactsArray, int contactGeomSize) { int count; @@ -1090,7 +1062,7 @@ namespace OpenSim.Region.PhysicsModule.ODE if (b1 != IntPtr.Zero && b2 != IntPtr.Zero && d.AreConnectedExcluding(b1, b2, d.JointType.Contact)) return; - count = CollideGeoms(g1, g2, contacts.Length, contacts, d.ContactGeom.SizeOf); + count = CollideGeoms(g1, g2, contacts.Length, contacts, d.ContactGeom.unmanagedSizeOf); // All code after this is only relevant if we have any collisions if (count <= 0) @@ -2972,7 +2944,8 @@ namespace OpenSim.Region.PhysicsModule.ODE /// The number of frames simulated over that period. public override float Simulate(float timeStep) { - if (!_worldInitialized) return 11f; + if (!_worldInitialized) + return 1.0f; int startFrameTick = CollectStats ? Util.EnvironmentTickCount() : 0; int tempTick = 0, tempTick2 = 0; @@ -3804,133 +3777,6 @@ namespace OpenSim.Region.PhysicsModule.ODE return new List(ourResults); } -#if USE_DRAWSTUFF - // Keyboard callback - public void command(int cmd) - { - IntPtr geom; - d.Mass mass; - d.Vector3 sides = new d.Vector3(d.RandReal() * 0.5f + 0.1f, d.RandReal() * 0.5f + 0.1f, d.RandReal() * 0.5f + 0.1f); - - - - Char ch = Char.ToLower((Char)cmd); - switch ((Char)ch) - { - case 'w': - try - { - Vector3 rotate = (new Vector3(1, 0, 0) * Quaternion.CreateFromEulers(hpr.Z * Utils.DEG_TO_RAD, hpr.Y * Utils.DEG_TO_RAD, hpr.X * Utils.DEG_TO_RAD)); - - xyz.X += rotate.X; xyz.Y += rotate.Y; xyz.Z += rotate.Z; - ds.SetViewpoint(ref xyz, ref hpr); - } - catch (ArgumentException) - { hpr.X = 0; } - break; - - case 'a': - hpr.X++; - ds.SetViewpoint(ref xyz, ref hpr); - break; - - case 's': - try - { - Vector3 rotate2 = (new Vector3(-1, 0, 0) * Quaternion.CreateFromEulers(hpr.Z * Utils.DEG_TO_RAD, hpr.Y * Utils.DEG_TO_RAD, hpr.X * Utils.DEG_TO_RAD)); - - xyz.X += rotate2.X; xyz.Y += rotate2.Y; xyz.Z += rotate2.Z; - ds.SetViewpoint(ref xyz, ref hpr); - } - catch (ArgumentException) - { hpr.X = 0; } - break; - case 'd': - hpr.X--; - ds.SetViewpoint(ref xyz, ref hpr); - break; - case 'r': - xyz.Z++; - ds.SetViewpoint(ref xyz, ref hpr); - break; - case 'f': - xyz.Z--; - ds.SetViewpoint(ref xyz, ref hpr); - break; - case 'e': - xyz.Y++; - ds.SetViewpoint(ref xyz, ref hpr); - break; - case 'q': - xyz.Y--; - ds.SetViewpoint(ref xyz, ref hpr); - break; - } - } - - public void step(int pause) - { - - ds.SetColor(1.0f, 1.0f, 0.0f); - ds.SetTexture(ds.Texture.Wood); - lock (_prims) - { - foreach (OdePrim prm in _prims) - { - //IntPtr body = d.GeomGetBody(prm.prim_geom); - if (prm.prim_geom != IntPtr.Zero) - { - d.Vector3 pos; - d.GeomCopyPosition(prm.prim_geom, out pos); - //d.BodyCopyPosition(body, out pos); - - d.Matrix3 R; - d.GeomCopyRotation(prm.prim_geom, out R); - //d.BodyCopyRotation(body, out R); - - - d.Vector3 sides = new d.Vector3(); - sides.X = prm.Size.X; - sides.Y = prm.Size.Y; - sides.Z = prm.Size.Z; - - ds.DrawBox(ref pos, ref R, ref sides); - } - } - } - ds.SetColor(1.0f, 0.0f, 0.0f); - - foreach (OdeCharacter chr in _characters) - { - if (chr.Shell != IntPtr.Zero) - { - IntPtr body = d.GeomGetBody(chr.Shell); - - d.Vector3 pos; - d.GeomCopyPosition(chr.Shell, out pos); - //d.BodyCopyPosition(body, out pos); - - d.Matrix3 R; - d.GeomCopyRotation(chr.Shell, out R); - //d.BodyCopyRotation(body, out R); - - ds.DrawCapsule(ref pos, ref R, chr.Size.Z, 0.35f); - d.Vector3 sides = new d.Vector3(); - sides.X = 0.5f; - sides.Y = 0.5f; - sides.Z = 0.5f; - - ds.DrawBox(ref pos, ref R, ref sides); - } - } - } - - public void start(int unused) - { - ds.SetViewpoint(ref xyz, ref hpr); - } -#endif - public override Dictionary GetStats() { if (!CollectStats) diff --git a/OpenSim/Region/PhysicsModules/Ode/drawstuff.cs b/OpenSim/Region/PhysicsModules/Ode/drawstuff.cs deleted file mode 100644 index 87ca4464dc..0000000000 --- a/OpenSim/Region/PhysicsModules/Ode/drawstuff.cs +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright ODE - * Ode.NET - .NET bindings for ODE - * Jason Perkins (starkos@industriousone.com) - * Licensed under the New BSD - * Part of the OpenDynamicsEngine -Open Dynamics Engine -Copyright (c) 2001-2007, Russell L. Smith. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: - -Redistributions of source code must retain the above copyright notice, -this list of conditions and the following disclaimer. - -Redistributions in binary form must reproduce the above copyright notice, -this list of conditions and the following disclaimer in the documentation -and/or other materials provided with the distribution. - -Neither the names of ODE's copyright owner nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * - */ - -using System; -using System.Runtime.InteropServices; -using Ode.NET; - -namespace Drawstuff.NET -{ -#if dDOUBLE - using dReal = System.Double; -#else - using dReal = System.Single; -#endif - - public static class ds - { - public const int VERSION = 2; - - public enum Texture - { - None, - Wood - } - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void CallbackFunction(int arg); - - [StructLayout(LayoutKind.Sequential)] - public struct Functions - { - public int version; - public CallbackFunction start; - public CallbackFunction step; - public CallbackFunction command; - public CallbackFunction stop; - public string path_to_textures; - } - - [DllImport("drawstuff", EntryPoint = "dsDrawBox")] - public static extern void DrawBox(ref d.Vector3 pos, ref d.Matrix3 R, ref d.Vector3 sides); - - [DllImport("drawstuff", EntryPoint = "dsDrawCapsule")] - public static extern void DrawCapsule(ref d.Vector3 pos, ref d.Matrix3 R, dReal length, dReal radius); - - [DllImport("drawstuff", EntryPoint = "dsDrawConvex")] - public static extern void DrawConvex(ref d.Vector3 pos, ref d.Matrix3 R, dReal[] planes, int planeCount, dReal[] points, int pointCount, int[] polygons); - - [DllImport("drawstuff", EntryPoint = "dsSetColor")] - public static extern void SetColor(float red, float green, float blue); - - [DllImport("drawstuff", EntryPoint = "dsSetTexture")] - public static extern void SetTexture(Texture texture); - - [DllImport("drawstuff", EntryPoint = "dsSetViewpoint")] - public static extern void SetViewpoint(ref d.Vector3 xyz, ref d.Vector3 hpr); - - [DllImport("drawstuff", EntryPoint = "dsSimulationLoop")] - public static extern void SimulationLoop(int argc, string[] argv, int window_width, int window_height, ref Functions fn); - } -} diff --git a/bin/Ode.NET.dll b/bin/Ode.NET.dll deleted file mode 100755 index fcf17b1b9d291cf007e483fd925e5a9cc42646dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51200 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 A{{R30 diff --git a/bin/Ode.NET.dll.config b/bin/Ode.NET.dll.config deleted file mode 100644 index c72c28119e..0000000000 --- a/bin/Ode.NET.dll.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - -