webForumDet fria alternativet

Importera namespaces i flera dll:er

.NET

11 svar · 293 visningar · startad av erka

Medlem sedan dec. 19996 522 inlägg
Frågan#1

Hepp! En noobfråga :)

Jag har en namespace som heter LLdataAccess, den ser ut något så här, denna är kompilerad till en dll

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Xml
Imports Microsoft.visualbasic

Namespace LL.DataAccess
  Public Class dataAccessLayer
	
  Massa funktion här i detta namespace
	
  End Class
End Namespace

Nu har jag en annan .vb fil som jag ska kompilera, denna vb innehåller ett namespace som heter LLDataLayerForum, den ser ut typ så här

Namespace LL.DataLayerForum

Public Class businessDataLayerForums
Inherits dataAccessLayer
  Massa funktion
End Class

End Namespace

Den ärver alltså från klassen dataAccessLayer som jag kompilerade till en dll med ett namespace i koden jag postade överst.

Min fråga är då följande. I min första klass/namespace/dll (den är ju alla 3) importerar jag namespaces som Imports System,Imports System.Data,Imports System.Data.SqlClient etc. Dessa behöver jag använda i min andra klass/namespace/dll men behöver jag då importera dessa i denna också. Då den ärver från dataAccessLayer. Då jag inte använder v.studio ännu måste jag lära mig detta förhand :)

Medlem sedan dec. 19996 522 inlägg
#2

Kanske lite luddigt förklarat ovan. Jag har inte riktigt hajjat när och hur man ska importera namespaces man behöver använda i sina dller.

Låt oss säga så här.

1. Jag har en databasklass som ligger i en dll, i denna finns då ett namespace som heter LL.DataAccess, för att denna ska fungera måste jag inkludera följande namespace

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Xml

2. Jag har sedan en ny dll, i denna dll ligger ett namespace som heter LL.ForumDataAccess, för att denna ska fungera måste jag importera:

Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Configuration
Imports System.Xml
Imports LL.DataAccess

Måste jag då alltså importera alla andra namespaces jag behöver i detta lager eller räcker det om jag importerar LL.DataAccess, den i sin tur har ju alla namespaces jag behöver importerade. Denna dll ärver ju från klassen i LL.DataAccess. Alla förklaringar är välkommna :)

Tacksam!

Medlem sedan juni 20022 599 inlägg
#3

Lång fråga, kort svar: Ja.

Imports är bara till för att du ska kunna använda korta klassnamn (tex XmlDocument istället för System.Xml.XmlDocument) i filen. Det har inget med arv eller länkning att göra.

Medlem sedan dec. 19996 522 inlägg
#4

Ahh å jag är med på banan nu, tack ;)

Medlem sedan dec. 19996 522 inlägg
#5

Ok nu försöker jag kompilera den andra dll:en, den använder funktioner som finns i dllen/namespacet/klassen den ärver ifrån. I första dllen/namespacet/klassen finns bland annat en funktion som ser ut på detta sätt

Public Function ExecuteNonQuery(strSQL As String)
Try
objCnn.Open()
Dim SqlCommand as SqlCommand = CreateSQLCommand(strSQL)
SqlCommand.ExecuteNonQuery()
Catch Exp As SqlException
 Throw(Exp)
Finally
  objCnn.Close()
  objCnn.Dispose()
  objCnn = Nothing
End Try
 End Function

i den .vb filen jag försöker kompilera nu anropar jag funktionen ovan på följande sätt.

Public Function UpdateTopicLastPost(TopicId As Integer)
	Dim strSQL As String = String.Format("UPDATE LL_forumTopics SET TopicLastReplyDate = GetDate() WHERE Pk_TopicId = "& TopicId &"")
	ExecuteNonQuery(strSQL)
End Function

Det första namespacet heter LL.DataAccess, den ligger i dll filen LL_DataAccess.dll och i en klass som heter dataAccessLayer, det namespacet jag ska kompilera till en dll heter LL.DataLayerForum. Nu försöker jag kompilera den och skickar med bland annat /r:LL_DataAccess.dll som är dllen som namespacet den importerar ligger i. Men jag får meddlande funktionerna i .vb filen som anropar namespacet LL.DataAccess inte är deklarerade. River snart mitt hår :(

Jag använder den första dllen/namespacet på sidor och det fungerar, varför fungerar det inte att kompilera en annan .vb fil som använder sig av den. Hur skriver jag i vbc för att anropa min första dll när jag kompilerar min andra. Det verkar inte fungera med /r:LL_DataAccess.dll som sagt..

Tacksam

Medlem sedan jan. 20012 204 inlägg
#6

Anropar du rätt?

Ligger ExecuteNonQuery() i en klass så får du väl skapa en instans av denna.

Medlem sedan dec. 19996 522 inlägg
#7

Tack men..Tänkte på det också. Men det jag inte hajjar är att det fungerar om jag har det typ så här.

<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Configuration " %>
<%@ Import Namespace="System.Xml " %>
<%@ Import Namespace=" LL.DataAccess" %>

<script runat="server" language="VB">
'Detta är klassen jag försöker kompilera till ett namespace som heter 
Public Class ForumDataAccess
	Inherits dataAccessLayer '(klassen i LL.DataAccess)

	Public Function UpdateTopicLastPost(TopicId As Integer)
		Dim strSQL As String = String.Format("UPDATE bla bla WHERE Pk_TopicId = "& TopicId &"")
		ExecuteNonQuery(strSQL)
	End Function

End Class

</script>

så fungerar det ju, då behöver jag inte skapa en ny instans av klassen dataAccessLayer när jag anropar funktioner i ForumDataAccess ifrån mitt affärslager. Vad är det som jag inte hajjat.

Medlem sedan jan. 20012 204 inlägg
#8

tja vet inte, men om du vill komma ifrån att skapa instanser så ka du ju använda "Shared" i funktionsanropet.

Medlem sedan dec. 19996 522 inlägg
#9

tack, har tänkt på det också. Dock undrar jag varför det går när jag har koden på sidan men inte när jag ska kompilera den till en dll.

Ingen annan som vet ?

Medlem sedan juni 20022 599 inlägg
#10

Jag kan kompilera din kod med 2 ändringar:

1. Imports LL_DataAccess.LL.DataAccess 'Viktigt.
2. Public Class ForumDataAccess : Inherits dataAccessLayer 'OBS kolon!

Jag kompilerar så här:

vbc /t:library /out:pelle.dll  /r:system.dll /r:system.data.dll  /r:system.XML.dll /r:LL_DataAccess.dll pelle.vb

(ForumDataAccess ligger alltså hos mig i en fil pelle.vb)

Medlem sedan dec. 19996 522 inlägg
#11

Stort tack niko, återkommer när jag testat.

Medlem sedan juni 20022 599 inlägg
#12

Lugnt. Fast jag svamlade visst när det gäller kolonet. Man verkar inte behöva det om man gör en radbrytning istället. Det visste jag inte ..

271 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)