Quantcast
Channel: Common Language Runtime Internals and Architecture forum
Viewing all 1710 articles
Browse latest View live

OpCodes.Ldc_I4_S Field


HOW TO ADD HYCAM 2.1 REFERENCE VS2015

$
0
0

If I try to add the tlb file from "C:\Program Files (x86)\HyperCam 2\HyCam2.tlb" it show this message:

How can I do?

Please!

COM/OLE object viewer

$
0
0

I want to view the type library (.tlb) for my dll with the COM OLE object view (oleview.exe) and I cant find it anywhere on my machine

clr function take more time when move one server to another

$
0
0

hii,

we have created clr for send notifiction .

In clr we send notifiction on android mobile it's working fine on local and testing server but on production server take  too much time nearly 4 minute'

we restore same .dll and fucntion

streamreader.readtoend taking 4 minutes for getting response from gcm at production server

Custom marshaling, threads, and nesting

$
0
0
In order for my question to make sense, it needs some setup.  Forgive me if you know some of this.

Mostly custom marshaling is pretty straight forward.  When calling a function with a parameter marked as 'UnmanagedType.CustomMarshaler' in addition to either [In] or [Out]:

- GetInstance() gets called and returns an instance of the custom marshaler.
- When .Net needs to marshal from native to managed it calls MarshalManagedToNative, which takes an object as a parameter and returns an IntPtr.
- When .Net needs to marshal from managed to native it calls MarshalNativeToManaged, which takes an IntPtr as a parameter and returns an object.

However, things get a little tricky for parameters that are [In, Out].

- If the marshaling starts by managed calling unmanaged, then MarshalManagedToNative gets called first and it returns an IntPtr (as per normal).
- When the unmanaged code is complete, the second half of the call comes (MarshalNativeToManaged) to send the value back into managed code.  The IntPtr you returned from MarshalManagedToNative is sent in as the parameter (again, as per normal).
- But in this case, the return value from MarshalNativeToManaged is ignored.

In order to complete the marshaling, you have to modify the the object that was sent in MarshalManagedToNative.  Since MarshalNativeToManaged doesn't pass this value again, you have to have saved it during the original MarshalManagedToNative call.

While it's unfortunate that the docs don't describe this requirement, it doesn't *seem* like it should be too hard to work around.  You just create a member variable on your custom marshaler class to save the object from the first call, and modify it in the second call.

However.

Threads
-------

If your custom marshaler is called from multiple threads, .Net *may* create multiple instances of the marshaler.  But even if it does create multiple instance, it doesn't use them.  .Net picks one, and uses it for every call from every thread.  As you might expect, this results in chaos if you are storing data members in the custom marshaler.

My first thought on how to solve this was to use ThreadStatic variables.  But is that safe?  The docs I've read for how managed threadids (which I assume are the basis for Threadstatic) get assigned are a little vague.  And given that we are alternating between managed code and unmanaged code, I'm even more concerned.

Am I guaranteed that both MarshalNativeToManaged and MarshalManagedToNative will always get called such that the ThreadStatic values will match?  It *seems* to, but anecdotal observation is not the same as "the spec guarantees that it will."

And even if it does, that brings us to the next problem.

Nesting
-------

InOut calls come in pairs.  You either have MarshalManagedToNative followed by MarshalNativeToManaged, or MarshalNativeToManaged followed by MarshalManagedToNative.  Which pair you get depends on whether you start in managed or unmanaged.

But what if you start with managed calling unmanaged (MarshalManagedToNative), but then the unmanaged code makes a call to managed code during its operation?  Perhaps it is forwarding the call.  Or maybe it just needs some information from a managed object to satisfy the first request.  It turns out that this too uses the same (single) instance of the custom marshaler.

Normal:
MarshalManagedToNative
MarshalNativeToManaged

Nested:
C1: MarshalManagedToNative - 1
C2: MarshalNativeToManaged - 2 (nested call)
C3: MarshalManagedToNative - 2
C4: MarshalNativeToManaged - 1

So when a custom marshaler starts with a MarshalManagedToNative, which is followed by a MarshalNativeToManaged, there is no way to know whether the MarshalNativeToManaged is the second half of a 'normal' call, or the first half of a nested call.  You can try to guess.  If you see that the IntPtr you received in C2 is the same one you just returned from C1, that might indicate it's the end of a normal call.  But that could also mean that the call is being forwarded to managed to respond.

If you work the problem long enough, you can find some solutions.

I've written an implementation using ThreadStatic.  It seems to work, but it depends on ThreadStatic working the way I hope it does, along with some hopes about how custom marshaling works (and will continue to work).  As you might guess, the code is complex, if brief.

I also have an alternative that was proposed using ConcurrentDictionary.  This solves some problems over ThreadStatic, but generates others.

These are both rather complex and feel like clumsy work-arounds.  Is there an 'official' or commonly used solution?  It would be great if there were some trick I'm just missing here.

I have some (ugly) sample code if anyone wants to experiment (tested with 2.0 and 4.0.3).  But I'm really hoping that someone else has some code they can share with me.

Event Handling IDispatch::Invoke() Implementation of the CLR.

$
0
0

Hello all,

1. I have recently made a report to Microsoft Connect regarding a possible bug in the CLR code that handles COM events fired from unmanaged COM servers :

Microsoft Connect

2. Since then, I have been doing research on the internals of the flow of event firing from an unmanaged COM server's IDispatch::Invoke() method call right down to the invokation of the managed object's event handler delegate function.


3. I have managed to find some interesting information about a ComEventsSink class from :

COMEventsSink.cs

4. This class provides an implementation for IDispatch and is used by the ComEventsHelper and the ComEventsInfo classes. Its Invoke() method provided very good info to me and there is a hint on why an event method which takes a  SAFEARRAY reference parameter winds up returning E_INVALIDARG (an ArgumentException exception is thrown).

5. I also had a look at the *_SinkHelper class declared in the disassembled IL code of the interop assembly generated by tlbimp.exe for an unmanaged COM server. I see that it directly calls the Invoke() method of the delegate with no reference to any ComEventsSink object.

6. It is pretty clear that there must be some IDispatch implementation behind the SinkHelper class that gets called by the COM server event firing code.

7. Since the SinkHelper class is derived from System.Object, I believe that the SinkHelper probably inherits this IDispatch implementation of the System.Object class.

9.It is also possible that System.Object may internally use the ComEventsSink class to handle COM events.

10. I was wondering if anyone has any knowledge of this IDispatch implementation ?

11. Thanks, all.


- Bio.



Please visit my blog : http://limbioliong.wordpress.com/


Creation of a MSI Installer with VS2013 Community

$
0
0

Hello,

Is it possible to create a MSI Installer with VS2013 Community, or are there any restrictions since it is a free version of a VS.

In case it is ok, I would like to know to make it.

Thanks.

Muris

ASP.NET Compilation 60 delay (SharePoint, LaserFiche, and Visual Studio apps)

$
0
0

I have a 60+ second dynamic compilation delay showing up on multiple servers that seems to effect:

1.  ASP.NET development (60+ delay after any html file change) (switching to the CodeDom roslyn compiler is my current work around)

2.  MSBuild of most ASP.NET websites and web applications (CodeDom fix helps here as well)

2.  SharePoint Site spinup (any site collection I access seems to have a 60 second delay right AFTER it runs code which adds a custom control to the top of my pages)

3.  LaserFiche Workflow deployment (I assume due to a similar "runtime compilation" issue but haven't been able to prove that yet).

This seems like an extensive issue across multiple servers, although it is not ALL servers.  I have done extensive comparison across these servers and applications and am unable to track down what the cause is.  Anyone have any leads/suggestions for tracking down what might cause a dynamic compilation delay of multiples of 60 seconds (1 minute, or sometimes 2 or 4 minutes).

Thanks so much,

Jonathan








What is happening to allow version 2 of this sample to work properly?

$
0
0

This very simple C# console program demonstrates a non-obvious bug relating to multi-threaded access to an object. Because this object is defined as an int most programmers tend to treat it as though it were a value instead of a reference to an object. Here's the sample code:

using System;
using System.Threading;

namespace PocAnonymousWorkerThreadSafetyExperiment
{
    class Program
    {
        static void Main( string[] args )
        {
            for (int i = 0; i < 10; i++)
                new Thread( () => Console.Write( i ) ).Start();

            Console.ReadKey();
        }
    }
}

Here's an example of the program's output:

34446678910

The reason why the output is so flaky (that's a technical term) is obvious. The loop that creates the worker threads runs faster than the worker threads can be created and complete. Each worker thread is passed a reference to the object x and the value within x changes so the incorrect but intuitively obvious act of passing 'x' to each worker thread fails. Fine, that's pretty obvious. What follows next is not obvious.

using System;
using System.Threading;

namespace PocAnonymousWorkerThreadSafetyExperiment
{
    class Program
    {
        static void Main( string[] args )
        {
            for (int i = 0; i < 10; i++)
            {
                int temp = i;
                new Thread( () => Console.Write( temp ) ).Start();
            }

            Console.ReadKey();
        }
    }
}

And here's the output:

1203457698

The out of order part in understandable since there is no guarantee as to when a worker thread will start. The part that is not so clear is why does the output not duplicate or skip values? What's the difference between the variable 'i' that is part of the for loop and 'temp' which is defined as a variable within the loop? In both cases one may be excused for assuming that there is only one instance of each variable in existence but the 'temp' variable acts in a manner that is consistent with a new temp being defined each time we go through the loop. The older versions of 'temp' remain in memory and safe from garbage collection because of the outstanding reference to it in the worker threads but I'm just making up plausible theories at this point to support the observed facts. Can anyone tell me for a fact why version 2 of the sample doesn't have cross thread corruption of 'temp'?


Richard Lewis Haggard

No Implicit cast between C++ and C# for managed enums?

$
0
0

I find this behavior strange.  I have defined a managed enum and a class that uses it in a C++ managed wrapper as follows:

public enum class CvPlotType { None = -1, Mountains, Hills, Plains, Water };

public ref class CvPlotConnection
{
    ...
    property CvPlotType^ Type { CvPlotType^ get() { return (CvPlotType)mTargetSimPlot->type(); } }
    ...

};

The property above is seen as an "System.Enum" type when referenced in a C# project.  I have to explicitly cast the c# variable as follows (GeoSimCoreController.Plot(x, y) returns a CvPlotConnection handle):

CvPlotType type = (CvPlotType)GeoSimCoreController.Plot(x, y).Type

What is going on here?  I am really annoyed that the managed assembly does not cast the Type property properly.



High CPU when allocating memory

$
0
0

We are experiencing periods of time when CPU utilization of our application goes to %100 percent for several seconds. I tracked this down to two CLR methods which are called when ‘new’ objects are created.  The first being ?JIT_New@@YIPAVObject@@PAUCORINFO_CLASS_STRUCT_@@@Z. The second being ?JIT_NewArr1@@YIPAVObject@@PAUCORINFO_CLASS_STRUCT_@@H@Z. The size of the objects being created are relatively small.  I understand that there is more to memory allocation then just getting memory, and that Garbage Collection might also be involved. I also understand that it might spike the CPU.  But why would the spike last so long, upwards to 5+ seconds? Any insight would be greatly appreciated.

Thanks

Dan 

Initialization CLR error

$
0
0

I'm using this:


C++Выделить код
1
2
3
4
5
6
7
8
9

HRESULT hr;    ICLRMetaHost    *pMetaHost = nullptr;    ICLRRuntimeHost *pRuntimeHost = nullptr;    ICLRRuntimeInfo *pRuntimeInfo = nullptr;     hr = CLRCreateInstance(CLSID_CLRMetaHost, IID_ICLRMetaHost, (LPVOID *)&pMetaHost);    hr = pMetaHost->GetRuntime(L"v4.0.30319", IID_PPV_ARGS(&pRuntimeInfo));    hr = pRuntimeInfo->GetInterface(CLSID_CLRRuntimeHost, IID_PPV_ARGS(&pRuntimeHost));    hr = pRuntimeHost->Start();

But on calling Start(), i have hr=1

 if i use GetRuntime with L"v2.0.50727" it will be ok. hr=0

i have .net 4.6.1 on my machine

why i'm getting this?


BC30456: 'InitializeCulture' is not a member of FIXES

$
0
0

Windows 2003 Server SP1, ASP.Net 2.0

BC30456: 'InitializeCulture' is not a member of

Have a bug in your code but throws this error instead of the actual error? Or getting this error randomly? Or a similar error complaining that an asp.net method is not a member of a class like 'Page' when it is!? and mashing refresh a few times sometimes makes it go away...

After 2 Days of extensive search on the internet and finding plenty of people with this error and very little replies and resolutions, I took upon myself to get to the bottom of this (unacknowledged ASP.net framework bug) and list some steps to help all of you work around it.

1. If you use Visual studio to publish your site, during the publishing stage on framework 2.0 uncheck the "allow this precompiled site to be updatable".

2. Ensure ASP.Net is installed correctly, I found that my Web Server root was configured to use ASP.Net 1.1 by default so ran the following line to fix it to 2.0 even though my site was configured for 2.0 at site level, eliminating this glitch seems logical.

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis -i

This will also fix any mapping/installation problems.

Also ran aspnet_regiis -r

This will replace all mappings recursively to 2.0 regardless.

3. Make sure page directives at the top of aspx files are correct and ‘inherits’ is pointing to your class correctly. I could not see any problems with mine, so did not explore down this path to thoroughly, but noted others saying issues with ambiguous inheritance maybe related.

4. Declare culture in your web.config, example

<globalization uiCulture="en" culture="en-NZ" />

OR

<globalization uiCulture="auto" culture="auto" />

5. Change debug="true" to "false" in web.config and any pages which have it set (I recommend removing it entirely from pages and just using web.config)

* This final step eliminated the problem for me, very weird.

Now if this last step eliminates the problem, and later on down the track you get an error in your codebehind file while coding or debugging, you will no longer be pointed directly to the line in your codebehind file when an exception occurs, asp.net will just show you the line in the aspx file you called from. Temporarily switch debug back to true in web.config if you can't figure out the problem and then you can see it, if InitializeCulture crops back up instead, mash refresh a few times like you used to do! Then turn debug back off.

---

Does anyone else have anymore info?

My question to Microsoft, why does this behaviour exist? Is it by design or really a bug? If so, why is there no acknowledgment of it as a bug for ASP.Net 2.0?

-juicyjuice

Where to start finding source of Stack Overflow Exception ?

$
0
0

I am getting the following error on a Windows 2008 R2 server using .NET 4.0

Problem Event Name: CLR20r3

  Problem Signature 01: myprogram.exe

  Problem Signature 02: 3.0.0.0

  Problem Signature 03: 56e18eeb

  Problem Signature 04: wimwanan

  Problem Signature 05: 0.0.0.0

  Problem Signature 06: 57905dff

  Problem Signature 07: 1a

  Problem Signature 08: 0

  Problem Signature 09: System.StackOverflowException

Thanks for any ideas

Tom


MisterT99


System.Runtime.InteropServices.COMException 80040154

$
0
0

Hi all,

I´ve downloaded a third-party application wich is basically  a Web folder with all the necessary elements to start working. That application is using a SQL Server database (2016 Express) and the server is a Windows 2012 R2 64Bit, the IIS is version 8.5.

The major of the functionalities of the application work fine, but there is a particular one that is crashed:

1. There are several items in a list (Table) with hyperlinks

2. When I clic an item, a second window is deployed, this window has several tabs with information related to the item.

3. One of these tabs enable the user to upload files and relate them to the item, and shows the list of document already uploaded.

4. Uploading files is not a problem, but when I try to download (clic the file in the list) I got the error described bellow.

Please take into account:

* I can't modify the application

* Parameter Enable 32Bit applications is true in Application pool

Event code: 3005 
Event message: An unhandled exception has occurred. 
Event time: 7/21/2016 4:41:45 PM 
Event time (UTC): 7/21/2016 4:41:45 PM 
Event ID: e1f106225d3c4fa89cb261a98c4ec3c4 
Event sequence: 17 
Event occurrence: 1 
Event detail code: 0 
 
Application information: 
    Application domain: /LM/W3SVC/1/ROOT/metas-1-131135928184214955 
    Trust level: Full 
    Application Virtual Path: /metas 
    Application Path: C:\inetpub\wwwroot\metas\ 
    Machine name: WIN-62BOCH0K6TE 
 
Process information: 
    Process ID: 6800 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\SIGOB 
 
Exception information: 
    Exception type: COMException 
    Exception message: Retrieving the COM class factory for component with CLSID {B3D78EC1-33EB-4623-8C3A-13D84C22E00F} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Activator.CreateInstance(Type type)
   at GESTION.componentes_metas_downdoc.Page_Load(Object sender, EventArgs e)
   at System.Web.UI.Control.OnLoad(EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
 
Request information: 
    Request URL: http://52.37.208.12/metas/componentes/metas/downdoc.aspx?tipo=0&codigo_documento=1116&archivo=Xyz 
    Request path: /metas/componentes/metas/downdoc.aspx 
    User host address: 186.29.110.10 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: IIS APPPOOL\SIGOB 
 
Thread information: 
    Thread ID: 7 
    Thread account name: IIS APPPOOL\SIGOB 
    Is impersonating: False 
    Stack trace:    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Activator.CreateInstance(Type type)
   at GESTION.componentes_metas_downdoc.Page_Load(Object sender, EventArgs e)
   at System.Web.UI.Control.OnLoad(EventArgs e)
   at System.Web.UI.Control.LoadRecursive()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

-------------------------------------------------------------------------------------------------------------------------------------------------------

The code of the component highlighted above is:

using Microsoft.VisualBasic.CompilerServices;
using rlaISAPIComun;
using System;
using System.IO;
using System.Runtime.CompilerServices;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;

namespace GESTION
{
  public class componentes_metas_downdoc : Page
  {
    [AccessedThroughProperty("form1")]
    private HtmlForm _form1;

    protected virtual HtmlForm form1
    {
      get
      {
        return this._form1;
      }
      [MethodImpl(MethodImplOptions.Synchronized)] set
      {
        this._form1 = value;
      }
    }

    public componentes_metas_downdoc()
    {
      this.Load += new EventHandler(this.Page_Load);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
      this.Response.Cache.SetCacheability(HttpCacheability.NoCache);
      // ISSUE: variable of a compiler-generated type
      sigComunISAPI sigComunIsapi = (sigComunISAPI) Activator.CreateInstance(Type.GetTypeFromCLSID(new Guid("B3D78EC1-33EB-4623-8C3A-13D84C22E00F")));
      string string1 = Conversions.ToString(this.Application["ServidorDB"]);
      string string2 = Conversions.ToString(this.Application["BaseDeDatos"]);
      string string3 = Conversions.ToString(this.Application["UsuarioDB"]);
      string string4 = Conversions.ToString(this.Application["ClaveDB"]);
      string string5 = Conversions.ToString(Operators.ConcatenateObject(this.Application["RutaCache"], (object) "\\cache\\"));
      string str1 = this.Request.QueryString["codigo_documento"];
      string str2 = this.Request.QueryString["archivo"];
      string str3 = this.Request.QueryString["tipo"];
      // ISSUE: reference to a compiler-generated method
      string str4 = sigComunIsapi.ExtraerArchivo(string2, string1, string3, string4, string5, "documentos_procal", "documento", "codigo_documento", Conversions.ToInteger(str1), true, true, false);
      string str5 = string5 + str4;
      string lower = Path.GetExtension(str5).ToLower();
      int num = (int) File.GetAttributes(str5);
      string path = string5 + str2 + lower;
      if (File.Exists(path))
        File.Delete(path);
      if (File.Exists(str5))
      {
        File.Move(str5, string5 + str2 + lower);
        File.Delete(str5);
      }
      this.Response.Redirect("..\\..\\cache\\" + str2 + lower);
    }
  }
}

I'll be grateful if you give me a help.

Best regards.


Geolocation services

$
0
0
For some strange reason I am missing the file lfsvc.dll where can I get this to use the service

Is Incremental Backup with VSS possible without Backup Stamps?

$
0
0

i'm trying to do a little backup app that needs to comunicate with VSS Writers and do an incremental backup.

After some reading i now know that there are a few possibilities to do incremental:

  • with partial files
  • with list of files changed since last backup

More info HERE

This makes sense, but the writer i'm querying returns those 2 lists empty. Still makes sense because i gave no backup stamps to my writer.

The real problem is that even after a successful Full backup the Writer i'm using always gives null on GetBackupStamp value. I set every component on success and completed the backup, looks like VSS is perfectly fine with my backup except for the missing Backup Stamp.

In my Writer's metadata i don't have the VSS_BS_TIMESTAMPED flag, so this is normal too (more info HERE ). This writer gave me those flag:

  • VSS_BS_INCREMENTAL
  • VSS_BS_COPY
  • VSS_BS_WRITER_SUPPORTS_NEW_TARGET

So, i can do incremental but i can't use backup stamps, maybe. I like to think that the VSS_BS_TIMESTAMPED flag will appear if setup *something* correctly.

Every file to backup have those flags (more info HERE):

  • VSS_FSBT_FULL_BACKUP_REQUIRED
  • VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED
  • VSS_FSBT_FULL_SNAPSHOT_REQUIRED
  • VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED

This happen because i don't have a way to tell VSS Writer about my initial Full Backup (i have no backup stamp!).

If i try to set my backup as Incremental (since its supported by this Writer, i have the Incremental Flag in writer metadata) it fails at PrepareForBackup(), i still think because i did not set a backup stamp or some refeerement to the first Full Backup. I check this error in the Writer State, i have the flag VSS_WS_FAILED_AT_PREPARE_BACKUP (more info: HERE)

TL;DR

And this brings me here, with this question: What i'm missing? There is some other way beside using Backup Stamps to do Incremental Backup with VSS?


How run Appliance on the not setup .net Framework Windows.

$
0
0
How can I run Appliance on the not setup .net Framework Windows for Visual C++ Form?

Got a SECURITY_E_INCOMPATIBLE_SHARE error under dotNet 4.6.0

$
0
0

I have an IL rewrite tool using SetILFunctionBody function, It working well under dotNet 2.0, 3.5 and 4.0

this month, I Got a SECURITY_E_INCOMPATIBLE_SHARE error under dotNet 4.6.0 , but I can't find more detail except the artical

https://msdn.microsoft.com/en-us/library/windows/desktop/dn720547(v=vs.110).aspx 

I can't confirm my SECURITY_E_INCOMPATIBLE_SHARE error is the same as the error described in this artical, and I can't find any examples to use the ICorProfilerCallback6::GetAssemblyReferences interface.

Can anybody help me to give me some examples code to use the interface ?

thank you.


MEF2 how to ExportMetaData

$
0
0

Hi,

I was working at a project using MEF1 which works fine for dynamically export metadata on different dlls.

Now I am moving forward to MEF2 in which I did not see much documentation on how to handle 'ExportMetadata".

Do I need to create concrete class for attributes for metadata? Could I still use this attributes in targeted class ?

Are there any good samples?

thanks


Maggie

Viewing all 1710 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>