解决使用用户控件时,由于使用了当前路径导致设计器不能正常工作的问题

当在用户控件中使用当前路径时,如果使用下列方法,可能会导致设计器不能正常工作:

 

Environment.CurrentDirectory

Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)

Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)

Application.StartupPath

 

这些方法在运行时没问题,但是在设计器加载时,就不对了,因为这些代码是在Visual Studio的进程(devenv.exe)中运行的(有点像代码注入,有心人可以利用这一点,对Visual Studio进行一些注入之类的),所以得到的是Visual Studio所在的目录。

 

当然,你可以在设计时用绝对路径,最终生成时再改回去,但这毕竟不是一个好方法。

 

后来我想到了获取当前代码所在模块的路径,结果发现其路径是X:/Users/UserName/AppData...,原来是编译器临时产生了一个文件,其路径跟工程无关,本来都想放弃了,打算用xxx.vshost.exe的路径来代替(前提是同一工程不能打开多次),结果想到了下面的方法:

 

Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase.Replace("file:///", "").Replace("/obj/", "/bin/"));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值