控件开发的问题(100分++)不够再加再加,帮顶给分,帮顶给分,帮顶给分

时间:2021-10-19 19:35:02
我做了一个ITextBox从TextBox继承来的,在控件的中显示控件自己(DLL)所在的路径,生成DLL文件后,把DLL文件放到(C:\TEMP\JKE)目录下.
新建一个Win-C#-app工程在控件栏中将些控件加到其中,拖到Fomr上后,显示为(C:\TEMP\JKE),正确.
将.NET关闭,再次启动.NET打开同一个工程,再拖控件到FORM上时就不对了显示为(D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE).以后就都不对了,请问是什么原因,如何解决?

34 个解决方案

#1


up

#2


不明,帮UP

#3


我做了一个ITextBox从TextBox继承来的,在控件的中显示控件自己(DLL)所在的路径,生成DLL文件后,把DLL文件放到(C:\TEMP\JKE)目录下.
新建一个Win-C#-app工程在控件栏中将,上面生成的控件(C:\TEMP\JKE)加到其中,拖到Fomr上后,显示为(C:\TEMP\JKE),正确.
将.NET关闭,再次启动.NET打开同一个工程,再拖控件到FORM上时就不对了显示为(D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE).以后就都不对了,请问是什么原因,如何解决?

#4


你是如何取得路径的?在哪里执行这段代码的?

光看上面的描述看不出什么问题来

#5


在哪都一样,比如加一个按钮在单击事中.用下面方法取得.

System.IO.Directory.GetCurrentDirectory()

#6


up

#7


up

#8


帮你顶!!

#9


好!
帮你UPPUPUPUPUPUP了

#10


ding

#11


.....

#12


up

#13


我猜:
    因为第一次加载这个DLL的时候GAC没有它的拷贝,也没有其它进程对这个DLL有访问的需求,所以它还在原地。 但当有另一个新的进程又想引用这个DLL的时候,系统就把它拷贝到缓存里边去了。
    你不妨在调用控件的客户端把控件的“CopyToLocal”属性设置为True,看看比尔开恩否?

#14


up

#15


UP

#16


不好意思.  请问在哪里设置CopyToLocal属性啊???
谢谢

#17


工程视窗-〉引用->[你那个控件的的名称空间]-〉鼠标右键按属性-〉“复制到本地”属性-〉True

#18


UP

#19


up,,,,,,,,,,,,,,.

#20


System.IO.Directory.GetCurrentDirectory() -->
string location = System.Reflection.Assembly.GetExecutingAssembly().Location;
System.IO.Directory.GetParent(location ).FullName

#21


原因在于,程序集的复制导致了当前工作目录的更改~~~所以你的代码会显示当前目录的名称
利用反射可以取得程序集的原始路径

#22


"复制到本地"应该可以的

#23


UP

#24


多谢各位,我都试试!!!!

#25


up

#26


你可能要用Release编译的版本吧,不要用Debug版本!

#27


我用的就是Release版!!!!

#28


首先感谢各位的帮助.
可是我发现将CopyToLocal不论是真还是假,到他所示目录里并没发现copy的复本.

#29


在Bin目录里边吧

#30


我是说不在它显示的这个目录里啊(D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE)

#31


帮你up

#32


你是如何获得这个值的呢?

#33


我顶

#34


帮顶

#1


up

#2


不明,帮UP

#3


我做了一个ITextBox从TextBox继承来的,在控件的中显示控件自己(DLL)所在的路径,生成DLL文件后,把DLL文件放到(C:\TEMP\JKE)目录下.
新建一个Win-C#-app工程在控件栏中将,上面生成的控件(C:\TEMP\JKE)加到其中,拖到Fomr上后,显示为(C:\TEMP\JKE),正确.
将.NET关闭,再次启动.NET打开同一个工程,再拖控件到FORM上时就不对了显示为(D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE).以后就都不对了,请问是什么原因,如何解决?

#4


你是如何取得路径的?在哪里执行这段代码的?

光看上面的描述看不出什么问题来

#5


在哪都一样,比如加一个按钮在单击事中.用下面方法取得.

System.IO.Directory.GetCurrentDirectory()

#6


up

#7


up

#8


帮你顶!!

#9


好!
帮你UPPUPUPUPUPUP了

#10


ding

#11


.....

#12


up

#13


我猜:
    因为第一次加载这个DLL的时候GAC没有它的拷贝,也没有其它进程对这个DLL有访问的需求,所以它还在原地。 但当有另一个新的进程又想引用这个DLL的时候,系统就把它拷贝到缓存里边去了。
    你不妨在调用控件的客户端把控件的“CopyToLocal”属性设置为True,看看比尔开恩否?

#14


up

#15


UP

#16


不好意思.  请问在哪里设置CopyToLocal属性啊???
谢谢

#17


工程视窗-〉引用->[你那个控件的的名称空间]-〉鼠标右键按属性-〉“复制到本地”属性-〉True

#18


UP

#19


up,,,,,,,,,,,,,,.

#20


System.IO.Directory.GetCurrentDirectory() -->
string location = System.Reflection.Assembly.GetExecutingAssembly().Location;
System.IO.Directory.GetParent(location ).FullName

#21


原因在于,程序集的复制导致了当前工作目录的更改~~~所以你的代码会显示当前目录的名称
利用反射可以取得程序集的原始路径

#22


"复制到本地"应该可以的

#23


UP

#24


多谢各位,我都试试!!!!

#25


up

#26


你可能要用Release编译的版本吧,不要用Debug版本!

#27


我用的就是Release版!!!!

#28


首先感谢各位的帮助.
可是我发现将CopyToLocal不论是真还是假,到他所示目录里并没发现copy的复本.

#29


在Bin目录里边吧

#30


我是说不在它显示的这个目录里啊(D:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE)

#31


帮你up

#32


你是如何获得这个值的呢?

#33


我顶

#34


帮顶