Riferimento a una DLL C ++ da un progetto ASP.NET C # utilizzando Visual Studio Community 2015 [chiuso]

-7

Questa domanda potrebbe essere un po 'strana, ma esiste un modo specifico per importare un riferimento C ++ in un progetto ASP.NET C #?

Il problema che sto avendo è che VS mi sta dando il seguente errore:

Error CS0246 The type or namespace name 'LicenseAdminApi' could not be found >(are you missing a using directive or an assembly reference?)...

Questo errore si manifesta solo nelle mie viste e non nel mio controller o in qualsiasi codice .cs, il codice all'interno delle mie viste in cui i campi di riferimento I definiti all'interno della DLL funzionano anche senza problemi. E il progetto compila / crea ed esegue come previsto senza problemi.

LisenseAdminApi è una DLL scritta anche dalla nostra azienda, solo in un dipartimento diverso ed è stata sviluppata in C ++. È necessario eseguire un runtime di Visual Studio 2015 C ++ ("Microsoft Visual C ++ 2015 Redistributable (x64) - 14.0.23918"). Ho anche dovuto modificare il mio progetto per eseguire in x64 e utilizzare la versione x64 di IIS. Senza installarlo ottengo il seguente errore quando provo ed eseguo il progetto:

Server Error in '/' Application.

Could not load file or assembly 'LicenseAdminApi.DLL' or one of its >dependencies. The specified module could not be found. Description: An unhandled exception occurred during the execution of the >current web request. Please review the stack trace for more information about >the error and where it originated in the code.

Exception Details: System.IO.FileNotFoundException: Could not load file or >assembly 'LicenseAdminApi.DLL' or one of its dependencies. The specified module >could not be found.

Simile all'errore VS mi sta dando nella lista degli errori, il che mi fa pensare che non sta usando il runtime in VS per leggere la DLL fino a quando il progetto non è compilato. È piuttosto strano perché, come ho detto, il progetto si integra perfettamente e viene eseguito senza problemi una volta installato il runtime, ma l'errore nella lista degli errori non sta andando via e ho bisogno di sistemarlo in quanto la politica aziendale non è di fare alcun codice con errori.

Modifica Se dovessi aggiungere "@using LicenseAdminApi" alla vista, mi viene restituito lo stesso errore nell'elenco degli errori. Non sono sicuro di quale soluzione provare se non sapessi cosa non va, per cominciare.

L'uso della DLL non è il problema, posso chiamare i metodi che mi servono e funzionano. Il problema è che VS mi sta dando un errore che sembra non esistere quando costruisco ed eseguo il mio progetto. A parte il modo standard di aggiungere un riferimento che presumo tutti sanno, c'è qualcosa che devo abilitare affinché VS legga la DLL C ++ prima di compilarla?

Modifica 2

Nelle mie viste / Web.config ho incluso il mio spazio dei nomi come il seguente:

<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
  <namespaces>
    ...
    <add namespace="LicenseAdminApi" />
  </namespaces>
</pages>

Che secondo me dovrebbe rendere lo spazio dei nomi disponibile nelle mie visualizzazioni, ma non è così.

Ancora una volta il codice funziona bene e il mio progetto sta crescendo, è solo quando non eseguo il debugging che VS mi sta dicendo che il mio tipo / spazio dei nomi non può essere trovato. Questo si verifica anche solo nelle mie visualizzazioni, all'interno dei miei controller posso fare riferimento allo spazio dei nomi senza ottenere un errore. Anche se ottengo l'errore in VS il codice e le mie viste funzionano perfettamente quando eseguo il debug

Per favore fatemi sapere se qualcuno ha bisogno di maggiori dettagli, ho provato molte soluzioni diverse comprese tutte le risposte fornite here

Grazie in anticipo

    
posta Dave 18.05.2016 - 09:08
fonte

2 risposte

2

Il designer di Visual Studio è un'applicazione a 32 bit e quindi non può caricare la DLL a 64 bit. Il motivo per cui funziona bene è che si sta utilizzando come 64 bit I.e. design e runtime sono architetture diverse.

Generalmente quando si importa una DLL nativa si scrive una classe wrapper per P / Invoke e quindi tutto fa riferimento a quella classe wrapper (probabilmente una classe statica). Ciò ti impedirebbe di ottenere gli errori del progettista.

Potresti avere tempo di progettazione in quella classe, ma puoi sempre usare le istruzioni #if per nascondere il codice specifico a 64 bit e scrivere articoli fittizi a 32 bit.

    
risposta data 18.05.2016 - 14:33
fonte
0

LisenseAdminApi is a DLL also written by our company, just in a different department and it was developed in C++. It requires a Visual Studio 2015 C++("Microsoft Visual C++ 2015 Redistributable (x64) - 14.0.23918") runtime to run.

Che ne dici di andare a chiedere agli sviluppatori che hanno creato la DLL come si usa supposto ?

Oppure, (Shock; Horror) leggi la documentazione che hanno fornito con la DLL su come dovrebbe essere usata?

L'uso del runtime '14 suggerisce che sia una build piuttosto recente, quindi c'è una buona probabilità che gli sviluppatori siano ancora in circolazione ...

    
risposta data 18.05.2016 - 13:06
fonte

Leggi altre domande sui tag