diff --git a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs
index 65fdaf409672ee..28a4677d45eca5 100644
--- a/src/coreclr/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs
+++ b/src/coreclr/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs
@@ -40,5 +40,46 @@ public static unsafe bool TryGetRawMetadata(this Assembly assembly, out byte* bl
return InternalTryGetRawMetadata(new QCallAssembly(ref rtAsm), ref blob, ref length);
}
+
+ [DllImport(RuntimeHelpers.QCall)]
+ private static extern unsafe void ApplyUpdate(QCallAssembly assembly, byte* metadataDelta, int metadataDeltaLength, byte* ilDelta, int ilDeltaLength, byte* pdbDelta, int pdbDeltaLength);
+
+ ///
+ /// Updates the specified assembly using the provided metadata, IL and PDB deltas.
+ ///
+ ///
+ /// Currently executing methods will continue to use the existing IL. New executions of modified methods will
+ /// use the new IL. Different runtimes may have different limitations on what kinds of changes are supported,
+ /// and runtimes make no guarantees as to the state of the assembly and process if the delta includes
+ /// unsupported changes.
+ ///
+ /// The assembly to update.
+ /// The metadata changes to be applied.
+ /// The IL changes to be applied.
+ /// The PDB changes to be applied.
+ /// The assembly argument is null.
+ /// The update could not be applied.
+ public static void ApplyUpdate(Assembly assembly, ReadOnlySpan metadataDelta, ReadOnlySpan ilDelta, ReadOnlySpan pdbDelta)
+ {
+ if (assembly == null)
+ {
+ throw new ArgumentNullException(nameof(assembly));
+ }
+
+ RuntimeAssembly? runtimeAssembly = assembly as RuntimeAssembly;
+ if (runtimeAssembly == null)
+ {
+ throw new ArgumentException(SR.Argument_MustBeRuntimeAssembly);
+ }
+
+ unsafe
+ {
+ RuntimeAssembly rtAsm = runtimeAssembly;
+ fixed (byte* metadataDeltaPtr = metadataDelta, ilDeltaPtr = ilDelta, pdbDeltaPtr = pdbDelta)
+ {
+ ApplyUpdate(new QCallAssembly(ref rtAsm), metadataDeltaPtr, metadataDelta.Length, ilDeltaPtr, ilDelta.Length, pdbDeltaPtr, pdbDelta.Length);
+ }
+ }
+ }
}
}
diff --git a/src/coreclr/vm/assemblynative.cpp b/src/coreclr/vm/assemblynative.cpp
index 432f16785b3fcc..165462e2a51643 100644
--- a/src/coreclr/vm/assemblynative.cpp
+++ b/src/coreclr/vm/assemblynative.cpp
@@ -25,6 +25,8 @@
#include "interoputil.h"
#include "frames.h"
#include "typeparse.h"
+#include "encee.h"
+#include "threadsuspend.h"
#include "appdomainnative.hpp"
#include "../binder/inc/bindertracing.h"
@@ -1407,3 +1409,48 @@ void QCALLTYPE AssemblyNative::TraceSatelliteSubdirectoryPathProbed(LPCWSTR file
END_QCALL;
}
+
+// static
+void QCALLTYPE AssemblyNative::ApplyUpdate(
+ QCall::AssemblyHandle assembly,
+ UINT8* metadataDelta,
+ INT32 metadataDeltaLength,
+ UINT8* ilDelta,
+ INT32 ilDeltaLength,
+ UINT8* pdbDelta,
+ INT32 pdbDeltaLength)
+{
+ QCALL_CONTRACT;
+
+ BEGIN_QCALL;
+
+ _ASSERTE(assembly != nullptr);
+ _ASSERTE(metadataDelta != nullptr);
+ _ASSERTE(metadataDeltaLength > 0);
+ _ASSERTE(ilDelta != nullptr);
+ _ASSERTE(ilDeltaLength > 0);
+
+#ifdef EnC_SUPPORTED
+ GCX_COOP();
+ {
+ if (CORDebuggerAttached())
+ {
+ COMPlusThrow(kNotSupportedException);
+ }
+ Module* pModule = assembly->GetDomainAssembly()->GetModule();
+ if (!pModule->IsEditAndContinueEnabled())
+ {
+ COMPlusThrow(kInvalidOperationException, W("InvalidOperation_AssemblyNotEditable"));
+ }
+ HRESULT hr = ((EditAndContinueModule*)pModule)->ApplyEditAndContinue(metadataDeltaLength, metadataDelta, ilDeltaLength, ilDelta);
+ if (FAILED(hr))
+ {
+ COMPlusThrow(kInvalidOperationException, W("InvalidOperation_EditFailed"));
+ }
+ }
+#else
+ COMPlusThrow(kNotImplementedException);
+#endif
+
+ END_QCALL;
+}
diff --git a/src/coreclr/vm/assemblynative.hpp b/src/coreclr/vm/assemblynative.hpp
index 4ba91275b72ec0..25ebf74d5c8a6f 100644
--- a/src/coreclr/vm/assemblynative.hpp
+++ b/src/coreclr/vm/assemblynative.hpp
@@ -127,6 +127,8 @@ class AssemblyNative
static void QCALLTYPE TraceAssemblyResolveHandlerInvoked(LPCWSTR assemblyName, LPCWSTR handlerName, LPCWSTR resultAssemblyName, LPCWSTR resultAssemblyPath);
static void QCALLTYPE TraceAssemblyLoadFromResolveHandlerInvoked(LPCWSTR assemblyName, bool isTrackedAssembly, LPCWSTR requestingAssemblyPath, LPCWSTR requestedAssemblyPath);
static void QCALLTYPE TraceSatelliteSubdirectoryPathProbed(LPCWSTR filePath, HRESULT hr);
+
+ static void QCALLTYPE ApplyUpdate(QCall::AssemblyHandle assembly, UINT8* metadataDelta, INT32 metadataDeltaLength, UINT8* ilDelta, INT32 ilDeltaLength, UINT8* pdbDelta, INT32 pdbDeltaLength);
};
#endif
diff --git a/src/coreclr/vm/ecalllist.h b/src/coreclr/vm/ecalllist.h
index 64d1b07c6f9122..ef5aba3a1da4aa 100644
--- a/src/coreclr/vm/ecalllist.h
+++ b/src/coreclr/vm/ecalllist.h
@@ -440,6 +440,7 @@ FCFuncEnd()
FCFuncStart(gAssemblyExtensionsFuncs)
QCFuncElement("InternalTryGetRawMetadata", AssemblyNative::InternalTryGetRawMetadata)
+ QCFuncElement("ApplyUpdate", AssemblyNative::ApplyUpdate)
FCFuncEnd()
FCFuncStart(gAssemblyLoadContextFuncs)
diff --git a/src/coreclr/vm/encee.cpp b/src/coreclr/vm/encee.cpp
index a230ae29bb4844..1e724493ab6da8 100644
--- a/src/coreclr/vm/encee.cpp
+++ b/src/coreclr/vm/encee.cpp
@@ -173,9 +173,9 @@ HRESULT EditAndContinueModule::ApplyEditAndContinue(
// Ensure the metadata is RW.
EX_TRY
{
- // ConvertMetadataToRWForEnC should only ever be called on EnC capable files.
+ // ConvertMDInternalToReadWrite should only ever be called on EnC capable files.
_ASSERTE(IsEditAndContinueCapable()); // this also checks that the file is EnC capable
- GetFile()->ConvertMetadataToRWForEnC();
+ GetFile()->ConvertMDInternalToReadWrite();
}
EX_CATCH_HRESULT(hr);
@@ -310,10 +310,13 @@ HRESULT EditAndContinueModule::UpdateMethod(MethodDesc *pMethod)
CONTRACTL_END;
// Notify the debugger of the update
- HRESULT hr = g_pDebugInterface->UpdateFunction(pMethod, m_applyChangesCount);
- if (FAILED(hr))
+ if (CORDebuggerAttached())
{
- return hr;
+ HRESULT hr = g_pDebugInterface->UpdateFunction(pMethod, m_applyChangesCount);
+ if (FAILED(hr))
+ {
+ return hr;
+ }
}
// Notify the JIT that we've got new IL for this method
@@ -375,7 +378,10 @@ HRESULT EditAndContinueModule::AddMethod(mdMethodDef token)
// Class isn't loaded yet, don't have to modify any existing EE data structures beyond the metadata.
// Just notify debugger and return.
LOG((LF_ENC, LL_INFO100, "EnCModule::AM class %p not loaded, our work is done\n", parentTypeDef));
- hr = g_pDebugInterface->UpdateNotYetLoadedFunction(token, this, m_applyChangesCount);
+ if (CORDebuggerAttached())
+ {
+ hr = g_pDebugInterface->UpdateNotYetLoadedFunction(token, this, m_applyChangesCount);
+ }
return hr;
}
@@ -391,12 +397,15 @@ HRESULT EditAndContinueModule::AddMethod(mdMethodDef token)
return hr;
}
- // Tell the debugger about the new method so it get's the version number properly
- hr = g_pDebugInterface->AddFunction(pMethod, m_applyChangesCount);
- if (FAILED(hr))
+ // Tell the debugger about the new method so it gets the version number properly
+ if (CORDebuggerAttached())
{
- _ASSERTE(!"Failed to add function");
- LOG((LF_ENC, LL_INFO100000, "**Error** EACM::AF: Failed to add method %p to debugger with hr 0x%x\n", token));
+ hr = g_pDebugInterface->AddFunction(pMethod, m_applyChangesCount);
+ if (FAILED(hr))
+ {
+ _ASSERTE(!"Failed to add function");
+ LOG((LF_ENC, LL_INFO100000, "**Error** EACM::AF: Failed to add method %p to debugger with hr 0x%x\n", token));
+ }
}
return hr;
@@ -463,10 +472,13 @@ HRESULT EditAndContinueModule::AddField(mdFieldDef token)
}
// Tell the debugger about the new field
- hr = g_pDebugInterface->AddField(pField, m_applyChangesCount);
- if (FAILED(hr))
+ if (CORDebuggerAttached())
{
- LOG((LF_ENC, LL_INFO100000, "**Error** EACM::AF: Failed to add field %p to debugger with hr 0x%x\n", token));
+ hr = g_pDebugInterface->AddField(pField, m_applyChangesCount);
+ if (FAILED(hr))
+ {
+ LOG((LF_ENC, LL_INFO100000, "**Error** EACM::AF: Failed to add field %p to debugger with hr 0x%x\n", token));
+ }
}
#ifdef _DEBUG
diff --git a/src/coreclr/vm/pefile.cpp b/src/coreclr/vm/pefile.cpp
index 406d76c11c1cbf..91069a74cb1dcb 100644
--- a/src/coreclr/vm/pefile.cpp
+++ b/src/coreclr/vm/pefile.cpp
@@ -747,30 +747,6 @@ void PEFile::ConvertMDInternalToReadWrite()
}
}
-void PEFile::ConvertMetadataToRWForEnC()
-{
- CONTRACTL
- {
- THROWS;
- GC_NOTRIGGER;
- MODE_ANY;
- }
- CONTRACTL_END;
-
- // This should only ever be called on EnC capable files.
- // One can check this using Module::IsEditAndContinueCapable().
-
- // This should only be called if we're debugging, stopped, and on the helper thread.
- _ASSERTE(CORDebuggerAttached());
- _ASSERTE((g_pDebugInterface != NULL) && g_pDebugInterface->ThisIsHelperThread());
- _ASSERTE((g_pDebugInterface != NULL) && g_pDebugInterface->IsStopped());
-
- // Convert the metadata to RW for Edit and Continue, properly replacing the metadata import interface pointer and
- // properly preserving the old importer. This will be called before the EnC system tries to apply a delta to the module's
- // metadata. ConvertMDInternalToReadWrite() does that quite nicely for us.
- ConvertMDInternalToReadWrite();
-}
-
void PEFile::OpenMDImport_Unsafe()
{
CONTRACTL
diff --git a/src/coreclr/vm/pefile.h b/src/coreclr/vm/pefile.h
index 32eb4f48334447..7df6ef6f5290f6 100644
--- a/src/coreclr/vm/pefile.h
+++ b/src/coreclr/vm/pefile.h
@@ -427,7 +427,6 @@ class PEFile
void OpenImporter();
void OpenEmitter();
- void ConvertMDInternalToReadWrite();
void ReleaseMetadataInterfaces(BOOL bDestructor, BOOL bKeepNativeData=FALSE);
@@ -536,7 +535,7 @@ class PEFile
static PEFile* Dummy();
void MarkNativeImageInvalidIfOwned();
- void ConvertMetadataToRWForEnC();
+ void ConvertMDInternalToReadWrite();
protected:
PTR_ICLRPrivAssembly m_pHostAssembly;
diff --git a/src/libraries/System.Private.CoreLib/src/Resources/Strings.resx b/src/libraries/System.Private.CoreLib/src/Resources/Strings.resx
index 69032d2d68e84a..d51bda348b4ad9 100644
--- a/src/libraries/System.Private.CoreLib/src/Resources/Strings.resx
+++ b/src/libraries/System.Private.CoreLib/src/Resources/Strings.resx
@@ -3673,4 +3673,10 @@
Use of ResourceManager for custom types is disabled. Set the MSBuild Property CustomResourceTypesSupport to true in order to enable it.
+
+ The assembly can not be edited or changed.
+
+
+ The assembly update failed.
+
\ No newline at end of file
diff --git a/src/libraries/System.Runtime.Loader/System.Runtime.Loader.sln b/src/libraries/System.Runtime.Loader/System.Runtime.Loader.sln
index 2412cb539439a4..4767a7069d8300 100644
--- a/src/libraries/System.Runtime.Loader/System.Runtime.Loader.sln
+++ b/src/libraries/System.Runtime.Loader/System.Runtime.Loader.sln
@@ -1,4 +1,8 @@
-Microsoft Visual Studio Solution File, Format Version 12.00
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.31005.135
+MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Private.CoreLib", "..\..\coreclr\System.Private.CoreLib\System.Private.CoreLib.csproj", "{64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestUtilities", "..\Common\tests\TestUtilities\TestUtilities.csproj", "{D6D16FFD-FD76-4700-B456-1DC4D093D1B5}"
@@ -7,7 +11,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Win32.Registry",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServices.Unsafe", "..\System.Runtime.CompilerServices.Unsafe\ref\System.Runtime.CompilerServices.Unsafe.csproj", "{8D19CD03-08EE-4574-B798-C658502C0A42}"
EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServices.Unsafe", "..\System.Runtime.CompilerServices.Unsafe\src\System.Runtime.CompilerServices.Unsafe.ilproj", "{074F38DA-36E1-4D2A-AEE6-3F783639ED9C}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.CompilerServices.Unsafe", "..\System.Runtime.CompilerServices.Unsafe\src\System.Runtime.CompilerServices.Unsafe.ilproj", "{04BA3E3C-6979-4792-B19E-C797AD607F42}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Runtime.Loader", "ref\System.Runtime.Loader.csproj", "{95B66B14-BCC7-407A-930C-4B34D4F7EC98}"
EndProject
@@ -48,41 +52,27 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{52AEFCDE-2CD8-4DE0-91DA-2B0B2AC32FD0}"
EndProject
Global
- GlobalSection(NestedProjects) = preSolution
- {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558} = {2AA50D1B-FD91-4748-85CF-33B2D265EBF6}
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C} = {2AA50D1B-FD91-4748-85CF-33B2D265EBF6}
- {B8F22D73-B183-4F17-9D5E-04B80699E56A} = {2AA50D1B-FD91-4748-85CF-33B2D265EBF6}
- {D6D16FFD-FD76-4700-B456-1DC4D093D1B5} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {76BE0621-CDAD-4808-8537-ADC9F028286B} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {78BC94E5-2E23-40EF-863E-52AFCE838C96} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {7E785A7B-6ED6-4459-A07D-28DE1830C186} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {F0CEA7EB-E8B5-482A-AB6C-3E12992F2902} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {10699CE6-A1B3-4C14-93E0-CB5CF3292BDD} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {44B22827-B9F0-4ADC-969C-7EC647D0B82A} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {49B0A873-5834-45A4-9495-E1063005CB82} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {E60DD367-D1D7-4F6C-919B-DC68E8445E97} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {9AD657ED-396B-4BE7-BCB6-BCA130825418} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {29E02AA9-E3D5-400C-B2C5-970B6E6D8562} = {C573CBE3-41F5-400D-A212-34889236C09C}
- {E046E80F-B18A-463E-82D3-9755F9F8D8E9} = {52AEFCDE-2CD8-4DE0-91DA-2B0B2AC32FD0}
- {8D19CD03-08EE-4574-B798-C658502C0A42} = {52AEFCDE-2CD8-4DE0-91DA-2B0B2AC32FD0}
- {95B66B14-BCC7-407A-930C-4B34D4F7EC98} = {52AEFCDE-2CD8-4DE0-91DA-2B0B2AC32FD0}
- {E38F7C05-A856-47AF-B210-5FE1EDB1DBF1} = {52AEFCDE-2CD8-4DE0-91DA-2B0B2AC32FD0}
- {9D650A86-9EB5-41E6-89CE-B2A302D4F33F} = {52AEFCDE-2CD8-4DE0-91DA-2B0B2AC32FD0}
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ ..\System.Private.CoreLib\src\System.Private.CoreLib.Shared.projitems*{64ddd2af-bf90-4dd8-ac24-d2084db8d558}*SharedItemsImports = 5
EndGlobalSection
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Checked|Any CPU = Checked|Any CPU
+ Checked|x64 = Checked|x64
+ Checked|x86 = Checked|x86
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
- Checked|Any CPU = Checked|Any CPU
- Checked|x64 = Checked|x64
- Checked|x86 = Checked|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Checked|Any CPU.ActiveCfg = Checked|x64
+ {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Checked|Any CPU.Build.0 = Checked|x64
+ {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Checked|x64.ActiveCfg = Checked|x64
+ {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Checked|x64.Build.0 = Checked|x64
+ {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Checked|x86.ActiveCfg = Checked|x86
+ {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Checked|x86.Build.0 = Checked|x86
{64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Debug|Any CPU.ActiveCfg = Debug|x64
{64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Debug|Any CPU.Build.0 = Debug|x64
{64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Debug|x64.ActiveCfg = Debug|x64
@@ -95,12 +85,9 @@ Global
{64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Release|x64.Build.0 = Release|x64
{64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Release|x86.ActiveCfg = Release|x86
{64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Release|x86.Build.0 = Release|x86
- {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Checked|Any CPU.ActiveCfg = Checked|x64
- {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Checked|Any CPU.Build.0 = Checked|x64
- {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Checked|x64.ActiveCfg = Checked|x64
- {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Checked|x64.Build.0 = Checked|x64
- {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Checked|x86.ActiveCfg = Checked|x86
- {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558}.Checked|x86.Build.0 = Checked|x86
+ {D6D16FFD-FD76-4700-B456-1DC4D093D1B5}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {D6D16FFD-FD76-4700-B456-1DC4D093D1B5}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {D6D16FFD-FD76-4700-B456-1DC4D093D1B5}.Checked|x86.ActiveCfg = Debug|Any CPU
{D6D16FFD-FD76-4700-B456-1DC4D093D1B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D6D16FFD-FD76-4700-B456-1DC4D093D1B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D6D16FFD-FD76-4700-B456-1DC4D093D1B5}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -113,9 +100,9 @@ Global
{D6D16FFD-FD76-4700-B456-1DC4D093D1B5}.Release|x64.Build.0 = Release|Any CPU
{D6D16FFD-FD76-4700-B456-1DC4D093D1B5}.Release|x86.ActiveCfg = Release|Any CPU
{D6D16FFD-FD76-4700-B456-1DC4D093D1B5}.Release|x86.Build.0 = Release|Any CPU
- {D6D16FFD-FD76-4700-B456-1DC4D093D1B5}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {D6D16FFD-FD76-4700-B456-1DC4D093D1B5}.Checked|x64.ActiveCfg = Debug|Any CPU
- {D6D16FFD-FD76-4700-B456-1DC4D093D1B5}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {E046E80F-B18A-463E-82D3-9755F9F8D8E9}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {E046E80F-B18A-463E-82D3-9755F9F8D8E9}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {E046E80F-B18A-463E-82D3-9755F9F8D8E9}.Checked|x86.ActiveCfg = Debug|Any CPU
{E046E80F-B18A-463E-82D3-9755F9F8D8E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E046E80F-B18A-463E-82D3-9755F9F8D8E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E046E80F-B18A-463E-82D3-9755F9F8D8E9}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -128,9 +115,9 @@ Global
{E046E80F-B18A-463E-82D3-9755F9F8D8E9}.Release|x64.Build.0 = Release|Any CPU
{E046E80F-B18A-463E-82D3-9755F9F8D8E9}.Release|x86.ActiveCfg = Release|Any CPU
{E046E80F-B18A-463E-82D3-9755F9F8D8E9}.Release|x86.Build.0 = Release|Any CPU
- {E046E80F-B18A-463E-82D3-9755F9F8D8E9}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {E046E80F-B18A-463E-82D3-9755F9F8D8E9}.Checked|x64.ActiveCfg = Debug|Any CPU
- {E046E80F-B18A-463E-82D3-9755F9F8D8E9}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {8D19CD03-08EE-4574-B798-C658502C0A42}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {8D19CD03-08EE-4574-B798-C658502C0A42}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {8D19CD03-08EE-4574-B798-C658502C0A42}.Checked|x86.ActiveCfg = Debug|Any CPU
{8D19CD03-08EE-4574-B798-C658502C0A42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8D19CD03-08EE-4574-B798-C658502C0A42}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8D19CD03-08EE-4574-B798-C658502C0A42}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -143,24 +130,24 @@ Global
{8D19CD03-08EE-4574-B798-C658502C0A42}.Release|x64.Build.0 = Release|Any CPU
{8D19CD03-08EE-4574-B798-C658502C0A42}.Release|x86.ActiveCfg = Release|Any CPU
{8D19CD03-08EE-4574-B798-C658502C0A42}.Release|x86.Build.0 = Release|Any CPU
- {8D19CD03-08EE-4574-B798-C658502C0A42}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {8D19CD03-08EE-4574-B798-C658502C0A42}.Checked|x64.ActiveCfg = Debug|Any CPU
- {8D19CD03-08EE-4574-B798-C658502C0A42}.Checked|x86.ActiveCfg = Debug|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Debug|x64.ActiveCfg = Debug|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Debug|x64.Build.0 = Debug|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Debug|x86.ActiveCfg = Debug|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Debug|x86.Build.0 = Debug|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Release|Any CPU.Build.0 = Release|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Release|x64.ActiveCfg = Release|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Release|x64.Build.0 = Release|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Release|x86.ActiveCfg = Release|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Release|x86.Build.0 = Release|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Checked|x64.ActiveCfg = Debug|Any CPU
- {074F38DA-36E1-4D2A-AEE6-3F783639ED9C}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x64.Build.0 = Debug|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Debug|x86.Build.0 = Debug|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|Any CPU.Build.0 = Release|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x64.ActiveCfg = Release|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x64.Build.0 = Release|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x86.ActiveCfg = Release|Any CPU
+ {04BA3E3C-6979-4792-B19E-C797AD607F42}.Release|x86.Build.0 = Release|Any CPU
+ {95B66B14-BCC7-407A-930C-4B34D4F7EC98}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {95B66B14-BCC7-407A-930C-4B34D4F7EC98}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {95B66B14-BCC7-407A-930C-4B34D4F7EC98}.Checked|x86.ActiveCfg = Debug|Any CPU
{95B66B14-BCC7-407A-930C-4B34D4F7EC98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{95B66B14-BCC7-407A-930C-4B34D4F7EC98}.Debug|Any CPU.Build.0 = Debug|Any CPU
{95B66B14-BCC7-407A-930C-4B34D4F7EC98}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -173,9 +160,9 @@ Global
{95B66B14-BCC7-407A-930C-4B34D4F7EC98}.Release|x64.Build.0 = Release|Any CPU
{95B66B14-BCC7-407A-930C-4B34D4F7EC98}.Release|x86.ActiveCfg = Release|Any CPU
{95B66B14-BCC7-407A-930C-4B34D4F7EC98}.Release|x86.Build.0 = Release|Any CPU
- {95B66B14-BCC7-407A-930C-4B34D4F7EC98}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {95B66B14-BCC7-407A-930C-4B34D4F7EC98}.Checked|x64.ActiveCfg = Debug|Any CPU
- {95B66B14-BCC7-407A-930C-4B34D4F7EC98}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {B8F22D73-B183-4F17-9D5E-04B80699E56A}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {B8F22D73-B183-4F17-9D5E-04B80699E56A}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {B8F22D73-B183-4F17-9D5E-04B80699E56A}.Checked|x86.ActiveCfg = Debug|Any CPU
{B8F22D73-B183-4F17-9D5E-04B80699E56A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B8F22D73-B183-4F17-9D5E-04B80699E56A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B8F22D73-B183-4F17-9D5E-04B80699E56A}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -188,9 +175,9 @@ Global
{B8F22D73-B183-4F17-9D5E-04B80699E56A}.Release|x64.Build.0 = Release|Any CPU
{B8F22D73-B183-4F17-9D5E-04B80699E56A}.Release|x86.ActiveCfg = Release|Any CPU
{B8F22D73-B183-4F17-9D5E-04B80699E56A}.Release|x86.Build.0 = Release|Any CPU
- {B8F22D73-B183-4F17-9D5E-04B80699E56A}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {B8F22D73-B183-4F17-9D5E-04B80699E56A}.Checked|x64.ActiveCfg = Debug|Any CPU
- {B8F22D73-B183-4F17-9D5E-04B80699E56A}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {76BE0621-CDAD-4808-8537-ADC9F028286B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {76BE0621-CDAD-4808-8537-ADC9F028286B}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {76BE0621-CDAD-4808-8537-ADC9F028286B}.Checked|x86.ActiveCfg = Debug|Any CPU
{76BE0621-CDAD-4808-8537-ADC9F028286B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{76BE0621-CDAD-4808-8537-ADC9F028286B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{76BE0621-CDAD-4808-8537-ADC9F028286B}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -203,9 +190,9 @@ Global
{76BE0621-CDAD-4808-8537-ADC9F028286B}.Release|x64.Build.0 = Release|Any CPU
{76BE0621-CDAD-4808-8537-ADC9F028286B}.Release|x86.ActiveCfg = Release|Any CPU
{76BE0621-CDAD-4808-8537-ADC9F028286B}.Release|x86.Build.0 = Release|Any CPU
- {76BE0621-CDAD-4808-8537-ADC9F028286B}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {76BE0621-CDAD-4808-8537-ADC9F028286B}.Checked|x64.ActiveCfg = Debug|Any CPU
- {76BE0621-CDAD-4808-8537-ADC9F028286B}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159}.Checked|x86.ActiveCfg = Debug|Any CPU
{8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -218,9 +205,9 @@ Global
{8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159}.Release|x64.Build.0 = Release|Any CPU
{8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159}.Release|x86.ActiveCfg = Release|Any CPU
{8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159}.Release|x86.Build.0 = Release|Any CPU
- {8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159}.Checked|x64.ActiveCfg = Debug|Any CPU
- {8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {78BC94E5-2E23-40EF-863E-52AFCE838C96}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {78BC94E5-2E23-40EF-863E-52AFCE838C96}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {78BC94E5-2E23-40EF-863E-52AFCE838C96}.Checked|x86.ActiveCfg = Debug|Any CPU
{78BC94E5-2E23-40EF-863E-52AFCE838C96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{78BC94E5-2E23-40EF-863E-52AFCE838C96}.Debug|Any CPU.Build.0 = Debug|Any CPU
{78BC94E5-2E23-40EF-863E-52AFCE838C96}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -233,9 +220,9 @@ Global
{78BC94E5-2E23-40EF-863E-52AFCE838C96}.Release|x64.Build.0 = Release|Any CPU
{78BC94E5-2E23-40EF-863E-52AFCE838C96}.Release|x86.ActiveCfg = Release|Any CPU
{78BC94E5-2E23-40EF-863E-52AFCE838C96}.Release|x86.Build.0 = Release|Any CPU
- {78BC94E5-2E23-40EF-863E-52AFCE838C96}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {78BC94E5-2E23-40EF-863E-52AFCE838C96}.Checked|x64.ActiveCfg = Debug|Any CPU
- {78BC94E5-2E23-40EF-863E-52AFCE838C96}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {7E785A7B-6ED6-4459-A07D-28DE1830C186}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {7E785A7B-6ED6-4459-A07D-28DE1830C186}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {7E785A7B-6ED6-4459-A07D-28DE1830C186}.Checked|x86.ActiveCfg = Debug|Any CPU
{7E785A7B-6ED6-4459-A07D-28DE1830C186}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7E785A7B-6ED6-4459-A07D-28DE1830C186}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7E785A7B-6ED6-4459-A07D-28DE1830C186}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -248,9 +235,9 @@ Global
{7E785A7B-6ED6-4459-A07D-28DE1830C186}.Release|x64.Build.0 = Release|Any CPU
{7E785A7B-6ED6-4459-A07D-28DE1830C186}.Release|x86.ActiveCfg = Release|Any CPU
{7E785A7B-6ED6-4459-A07D-28DE1830C186}.Release|x86.Build.0 = Release|Any CPU
- {7E785A7B-6ED6-4459-A07D-28DE1830C186}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {7E785A7B-6ED6-4459-A07D-28DE1830C186}.Checked|x64.ActiveCfg = Debug|Any CPU
- {7E785A7B-6ED6-4459-A07D-28DE1830C186}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {F0CEA7EB-E8B5-482A-AB6C-3E12992F2902}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {F0CEA7EB-E8B5-482A-AB6C-3E12992F2902}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {F0CEA7EB-E8B5-482A-AB6C-3E12992F2902}.Checked|x86.ActiveCfg = Debug|Any CPU
{F0CEA7EB-E8B5-482A-AB6C-3E12992F2902}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F0CEA7EB-E8B5-482A-AB6C-3E12992F2902}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F0CEA7EB-E8B5-482A-AB6C-3E12992F2902}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -263,9 +250,9 @@ Global
{F0CEA7EB-E8B5-482A-AB6C-3E12992F2902}.Release|x64.Build.0 = Release|Any CPU
{F0CEA7EB-E8B5-482A-AB6C-3E12992F2902}.Release|x86.ActiveCfg = Release|Any CPU
{F0CEA7EB-E8B5-482A-AB6C-3E12992F2902}.Release|x86.Build.0 = Release|Any CPU
- {F0CEA7EB-E8B5-482A-AB6C-3E12992F2902}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {F0CEA7EB-E8B5-482A-AB6C-3E12992F2902}.Checked|x64.ActiveCfg = Debug|Any CPU
- {F0CEA7EB-E8B5-482A-AB6C-3E12992F2902}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD}.Checked|x86.ActiveCfg = Debug|Any CPU
{CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -278,9 +265,9 @@ Global
{CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD}.Release|x64.Build.0 = Release|Any CPU
{CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD}.Release|x86.ActiveCfg = Release|Any CPU
{CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD}.Release|x86.Build.0 = Release|Any CPU
- {CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD}.Checked|x64.ActiveCfg = Debug|Any CPU
- {CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {10699CE6-A1B3-4C14-93E0-CB5CF3292BDD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {10699CE6-A1B3-4C14-93E0-CB5CF3292BDD}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {10699CE6-A1B3-4C14-93E0-CB5CF3292BDD}.Checked|x86.ActiveCfg = Debug|Any CPU
{10699CE6-A1B3-4C14-93E0-CB5CF3292BDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{10699CE6-A1B3-4C14-93E0-CB5CF3292BDD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{10699CE6-A1B3-4C14-93E0-CB5CF3292BDD}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -293,9 +280,9 @@ Global
{10699CE6-A1B3-4C14-93E0-CB5CF3292BDD}.Release|x64.Build.0 = Release|Any CPU
{10699CE6-A1B3-4C14-93E0-CB5CF3292BDD}.Release|x86.ActiveCfg = Release|Any CPU
{10699CE6-A1B3-4C14-93E0-CB5CF3292BDD}.Release|x86.Build.0 = Release|Any CPU
- {10699CE6-A1B3-4C14-93E0-CB5CF3292BDD}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {10699CE6-A1B3-4C14-93E0-CB5CF3292BDD}.Checked|x64.ActiveCfg = Debug|Any CPU
- {10699CE6-A1B3-4C14-93E0-CB5CF3292BDD}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {44B22827-B9F0-4ADC-969C-7EC647D0B82A}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {44B22827-B9F0-4ADC-969C-7EC647D0B82A}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {44B22827-B9F0-4ADC-969C-7EC647D0B82A}.Checked|x86.ActiveCfg = Debug|Any CPU
{44B22827-B9F0-4ADC-969C-7EC647D0B82A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{44B22827-B9F0-4ADC-969C-7EC647D0B82A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{44B22827-B9F0-4ADC-969C-7EC647D0B82A}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -308,9 +295,9 @@ Global
{44B22827-B9F0-4ADC-969C-7EC647D0B82A}.Release|x64.Build.0 = Release|Any CPU
{44B22827-B9F0-4ADC-969C-7EC647D0B82A}.Release|x86.ActiveCfg = Release|Any CPU
{44B22827-B9F0-4ADC-969C-7EC647D0B82A}.Release|x86.Build.0 = Release|Any CPU
- {44B22827-B9F0-4ADC-969C-7EC647D0B82A}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {44B22827-B9F0-4ADC-969C-7EC647D0B82A}.Checked|x64.ActiveCfg = Debug|Any CPU
- {44B22827-B9F0-4ADC-969C-7EC647D0B82A}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {49B0A873-5834-45A4-9495-E1063005CB82}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {49B0A873-5834-45A4-9495-E1063005CB82}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {49B0A873-5834-45A4-9495-E1063005CB82}.Checked|x86.ActiveCfg = Debug|Any CPU
{49B0A873-5834-45A4-9495-E1063005CB82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{49B0A873-5834-45A4-9495-E1063005CB82}.Debug|Any CPU.Build.0 = Debug|Any CPU
{49B0A873-5834-45A4-9495-E1063005CB82}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -323,9 +310,9 @@ Global
{49B0A873-5834-45A4-9495-E1063005CB82}.Release|x64.Build.0 = Release|Any CPU
{49B0A873-5834-45A4-9495-E1063005CB82}.Release|x86.ActiveCfg = Release|Any CPU
{49B0A873-5834-45A4-9495-E1063005CB82}.Release|x86.Build.0 = Release|Any CPU
- {49B0A873-5834-45A4-9495-E1063005CB82}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {49B0A873-5834-45A4-9495-E1063005CB82}.Checked|x64.ActiveCfg = Debug|Any CPU
- {49B0A873-5834-45A4-9495-E1063005CB82}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {E60DD367-D1D7-4F6C-919B-DC68E8445E97}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {E60DD367-D1D7-4F6C-919B-DC68E8445E97}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {E60DD367-D1D7-4F6C-919B-DC68E8445E97}.Checked|x86.ActiveCfg = Debug|Any CPU
{E60DD367-D1D7-4F6C-919B-DC68E8445E97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E60DD367-D1D7-4F6C-919B-DC68E8445E97}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E60DD367-D1D7-4F6C-919B-DC68E8445E97}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -338,9 +325,9 @@ Global
{E60DD367-D1D7-4F6C-919B-DC68E8445E97}.Release|x64.Build.0 = Release|Any CPU
{E60DD367-D1D7-4F6C-919B-DC68E8445E97}.Release|x86.ActiveCfg = Release|Any CPU
{E60DD367-D1D7-4F6C-919B-DC68E8445E97}.Release|x86.Build.0 = Release|Any CPU
- {E60DD367-D1D7-4F6C-919B-DC68E8445E97}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {E60DD367-D1D7-4F6C-919B-DC68E8445E97}.Checked|x64.ActiveCfg = Debug|Any CPU
- {E60DD367-D1D7-4F6C-919B-DC68E8445E97}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {9AD657ED-396B-4BE7-BCB6-BCA130825418}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {9AD657ED-396B-4BE7-BCB6-BCA130825418}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {9AD657ED-396B-4BE7-BCB6-BCA130825418}.Checked|x86.ActiveCfg = Debug|Any CPU
{9AD657ED-396B-4BE7-BCB6-BCA130825418}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9AD657ED-396B-4BE7-BCB6-BCA130825418}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9AD657ED-396B-4BE7-BCB6-BCA130825418}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -353,9 +340,9 @@ Global
{9AD657ED-396B-4BE7-BCB6-BCA130825418}.Release|x64.Build.0 = Release|Any CPU
{9AD657ED-396B-4BE7-BCB6-BCA130825418}.Release|x86.ActiveCfg = Release|Any CPU
{9AD657ED-396B-4BE7-BCB6-BCA130825418}.Release|x86.Build.0 = Release|Any CPU
- {9AD657ED-396B-4BE7-BCB6-BCA130825418}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {9AD657ED-396B-4BE7-BCB6-BCA130825418}.Checked|x64.ActiveCfg = Debug|Any CPU
- {9AD657ED-396B-4BE7-BCB6-BCA130825418}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {29E02AA9-E3D5-400C-B2C5-970B6E6D8562}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {29E02AA9-E3D5-400C-B2C5-970B6E6D8562}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {29E02AA9-E3D5-400C-B2C5-970B6E6D8562}.Checked|x86.ActiveCfg = Debug|Any CPU
{29E02AA9-E3D5-400C-B2C5-970B6E6D8562}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{29E02AA9-E3D5-400C-B2C5-970B6E6D8562}.Debug|Any CPU.Build.0 = Debug|Any CPU
{29E02AA9-E3D5-400C-B2C5-970B6E6D8562}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -368,9 +355,9 @@ Global
{29E02AA9-E3D5-400C-B2C5-970B6E6D8562}.Release|x64.Build.0 = Release|Any CPU
{29E02AA9-E3D5-400C-B2C5-970B6E6D8562}.Release|x86.ActiveCfg = Release|Any CPU
{29E02AA9-E3D5-400C-B2C5-970B6E6D8562}.Release|x86.Build.0 = Release|Any CPU
- {29E02AA9-E3D5-400C-B2C5-970B6E6D8562}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {29E02AA9-E3D5-400C-B2C5-970B6E6D8562}.Checked|x64.ActiveCfg = Debug|Any CPU
- {29E02AA9-E3D5-400C-B2C5-970B6E6D8562}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {E38F7C05-A856-47AF-B210-5FE1EDB1DBF1}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {E38F7C05-A856-47AF-B210-5FE1EDB1DBF1}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {E38F7C05-A856-47AF-B210-5FE1EDB1DBF1}.Checked|x86.ActiveCfg = Debug|Any CPU
{E38F7C05-A856-47AF-B210-5FE1EDB1DBF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E38F7C05-A856-47AF-B210-5FE1EDB1DBF1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E38F7C05-A856-47AF-B210-5FE1EDB1DBF1}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -383,9 +370,9 @@ Global
{E38F7C05-A856-47AF-B210-5FE1EDB1DBF1}.Release|x64.Build.0 = Release|Any CPU
{E38F7C05-A856-47AF-B210-5FE1EDB1DBF1}.Release|x86.ActiveCfg = Release|Any CPU
{E38F7C05-A856-47AF-B210-5FE1EDB1DBF1}.Release|x86.Build.0 = Release|Any CPU
- {E38F7C05-A856-47AF-B210-5FE1EDB1DBF1}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {E38F7C05-A856-47AF-B210-5FE1EDB1DBF1}.Checked|x64.ActiveCfg = Debug|Any CPU
- {E38F7C05-A856-47AF-B210-5FE1EDB1DBF1}.Checked|x86.ActiveCfg = Debug|Any CPU
+ {9D650A86-9EB5-41E6-89CE-B2A302D4F33F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
+ {9D650A86-9EB5-41E6-89CE-B2A302D4F33F}.Checked|x64.ActiveCfg = Debug|Any CPU
+ {9D650A86-9EB5-41E6-89CE-B2A302D4F33F}.Checked|x86.ActiveCfg = Debug|Any CPU
{9D650A86-9EB5-41E6-89CE-B2A302D4F33F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9D650A86-9EB5-41E6-89CE-B2A302D4F33F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9D650A86-9EB5-41E6-89CE-B2A302D4F33F}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -398,13 +385,33 @@ Global
{9D650A86-9EB5-41E6-89CE-B2A302D4F33F}.Release|x64.Build.0 = Release|Any CPU
{9D650A86-9EB5-41E6-89CE-B2A302D4F33F}.Release|x86.ActiveCfg = Release|Any CPU
{9D650A86-9EB5-41E6-89CE-B2A302D4F33F}.Release|x86.Build.0 = Release|Any CPU
- {9D650A86-9EB5-41E6-89CE-B2A302D4F33F}.Checked|Any CPU.ActiveCfg = Debug|Any CPU
- {9D650A86-9EB5-41E6-89CE-B2A302D4F33F}.Checked|x64.ActiveCfg = Debug|Any CPU
- {9D650A86-9EB5-41E6-89CE-B2A302D4F33F}.Checked|x86.ActiveCfg = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {64DDD2AF-BF90-4DD8-AC24-D2084DB8D558} = {2AA50D1B-FD91-4748-85CF-33B2D265EBF6}
+ {D6D16FFD-FD76-4700-B456-1DC4D093D1B5} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {E046E80F-B18A-463E-82D3-9755F9F8D8E9} = {52AEFCDE-2CD8-4DE0-91DA-2B0B2AC32FD0}
+ {8D19CD03-08EE-4574-B798-C658502C0A42} = {52AEFCDE-2CD8-4DE0-91DA-2B0B2AC32FD0}
+ {04BA3E3C-6979-4792-B19E-C797AD607F42} = {2AA50D1B-FD91-4748-85CF-33B2D265EBF6}
+ {95B66B14-BCC7-407A-930C-4B34D4F7EC98} = {52AEFCDE-2CD8-4DE0-91DA-2B0B2AC32FD0}
+ {B8F22D73-B183-4F17-9D5E-04B80699E56A} = {2AA50D1B-FD91-4748-85CF-33B2D265EBF6}
+ {76BE0621-CDAD-4808-8537-ADC9F028286B} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {8EB6F6F0-FD8C-44C8-A9D8-18854C3C2159} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {78BC94E5-2E23-40EF-863E-52AFCE838C96} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {7E785A7B-6ED6-4459-A07D-28DE1830C186} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {F0CEA7EB-E8B5-482A-AB6C-3E12992F2902} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {CA8B6E49-5EAF-4B7C-A141-6D83DD8D8AFD} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {10699CE6-A1B3-4C14-93E0-CB5CF3292BDD} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {44B22827-B9F0-4ADC-969C-7EC647D0B82A} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {49B0A873-5834-45A4-9495-E1063005CB82} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {E60DD367-D1D7-4F6C-919B-DC68E8445E97} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {9AD657ED-396B-4BE7-BCB6-BCA130825418} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {29E02AA9-E3D5-400C-B2C5-970B6E6D8562} = {C573CBE3-41F5-400D-A212-34889236C09C}
+ {E38F7C05-A856-47AF-B210-5FE1EDB1DBF1} = {52AEFCDE-2CD8-4DE0-91DA-2B0B2AC32FD0}
+ {9D650A86-9EB5-41E6-89CE-B2A302D4F33F} = {52AEFCDE-2CD8-4DE0-91DA-2B0B2AC32FD0}
+ EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {73D0667D-A181-41CA-B57B-DD177166E019}
EndGlobalSection
diff --git a/src/libraries/System.Runtime.Loader/ref/System.Runtime.Loader.cs b/src/libraries/System.Runtime.Loader/ref/System.Runtime.Loader.cs
index a942f9030c0d63..8279cfa8b9c43e 100644
--- a/src/libraries/System.Runtime.Loader/ref/System.Runtime.Loader.cs
+++ b/src/libraries/System.Runtime.Loader/ref/System.Runtime.Loader.cs
@@ -10,6 +10,7 @@ public static partial class AssemblyExtensions
{
[System.CLSCompliantAttribute(false)]
public unsafe static bool TryGetRawMetadata(this System.Reflection.Assembly assembly, out byte* blob, out int length) { throw null; }
+ public static void ApplyUpdate(Assembly assembly, ReadOnlySpan metadataDelta, ReadOnlySpan ilDelta, ReadOnlySpan pdbDelta) { throw null; }
}
}
namespace System.Runtime.Loader
diff --git a/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs b/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs
new file mode 100644
index 00000000000000..c254e1b67e2bed
--- /dev/null
+++ b/src/libraries/System.Runtime.Loader/tests/AssemblyExtensionsTest.cs
@@ -0,0 +1,37 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+
+using Xunit;
+
+namespace System.Reflection.Metadata
+{
+ public class AssemblyExtensionsTest
+ {
+ class NonRuntimeAssembly : Assembly
+ {
+ }
+
+ [Fact]
+ [ActiveIssue("https://github.com/dotnet/runtime/issues/45689", platforms: TestPlatforms.AnyUnix, runtimes: TestRuntimes.Mono)]
+ [PlatformSpecific(TestPlatforms.Windows)]
+ [SkipOnMono("Not yet implemented on Mono")]
+ public static void ApplyUpdateInvalidParameters()
+ {
+ // Dummy delta arrays
+ var metadataDelta = new byte[20];
+ var ilDelta = new byte[20];
+
+ // Assembly can't be null
+ Assert.Throws("assembly", () =>
+ AssemblyExtensions.ApplyUpdate(null, new ReadOnlySpan(metadataDelta), new ReadOnlySpan(ilDelta), ReadOnlySpan.Empty));
+
+ // Tests fail on non-runtime assemblies
+ Assert.Throws(() =>
+ AssemblyExtensions.ApplyUpdate(new NonRuntimeAssembly(), new ReadOnlySpan(metadataDelta), new ReadOnlySpan(ilDelta), ReadOnlySpan.Empty));
+
+ // Tests that this assembly isn't not editable
+ Assert.Throws(() =>
+ AssemblyExtensions.ApplyUpdate(typeof(AssemblyExtensions).Assembly, new ReadOnlySpan(metadataDelta), new ReadOnlySpan(ilDelta), ReadOnlySpan.Empty));
+ }
+ }
+}
diff --git a/src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj b/src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj
index ae825641dab5e3..11c1b7577fff9d 100644
--- a/src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj
+++ b/src/libraries/System.Runtime.Loader/tests/System.Runtime.Loader.Tests.csproj
@@ -8,6 +8,7 @@
false
+
diff --git a/src/mono/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs b/src/mono/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs
index dbffc31b016c51..2f6e1e65e557c8 100644
--- a/src/mono/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs
+++ b/src/mono/System.Private.CoreLib/src/System/Reflection/Metadata/AssemblyExtensions.cs
@@ -7,5 +7,7 @@ public static class AssemblyExtensions
{
[CLSCompliant(false)]
public static unsafe bool TryGetRawMetadata(this Assembly assembly, out byte* blob, out int length) => throw new NotImplementedException();
+
+ public static void ApplyUpdate(Assembly assembly, ReadOnlySpan metadataDelta, ReadOnlySpan ilDelta, ReadOnlySpan pdbDelta) => throw new NotImplementedException();
}
}