Example #1
0
	HRESULT InjectedType::DefineAssemblyMaxVersionRef(const ModuleID moduleId, LPCWSTR assemblyName, mdModuleRef* moduleRef) const
	{
		ATL::CComPtr<IMetaDataAssemblyEmit> metaDataAssemblyEmit;
		GUARD_FAILURE_HRESULT(GetMetaDataAssemblyEmit(moduleId, metaDataAssemblyEmit));

		AssemblyReference mscorlibReference;
		if (!m_assemblyRegistry->FindMaxAssemblyVersion(assemblyName, mscorlibReference))
		{
			return E_FAIL;
		}

		ASSEMBLYMETADATA mscorlibMetadata;
		ZeroMemory(&mscorlibMetadata, sizeof(mscorlibMetadata));
		mscorlibMetadata.usMajorVersion = mscorlibReference.version.majorVersion;
		mscorlibMetadata.usMinorVersion = mscorlibReference.version.minorVersion;
		mscorlibMetadata.usBuildNumber = mscorlibReference.version.buildNumber;
		mscorlibMetadata.usRevisionNumber = mscorlibReference.version.revisionNumber;

		const auto name = mscorlibReference.name.c_str();
		return metaDataAssemblyEmit->DefineAssemblyRef(mscorlibReference.publicKeyToken,
			sizeof(mscorlibReference.publicKeyToken),
			name,
			&mscorlibMetadata,
			nullptr,
			0,
			0,
			moduleRef);
	}