自动软件更新会导致某些模块属性不起作用吗?我真的很担心我在这里发布的这个功能。它们基本上是从当前正在执行的程序集中读取图像徽标的功能。名为“Get2LogoImageStream”的函数与“Get1LogoImageStream”的区别仅在于Current.ManifestModule.Name与Current.ManifestModule.ScopeName。
这个代码的“Current.ManifestModule.Name”版本适用于Web From app和Windows表单应用程序,但是现在它只适用于Windows App表单。但是,当我用“Current.ManifestModule.ScopeName”更改此代码“Current.ManifestModule.Name”时,它在WEB上运行没有任何问题。所以我对C#或VB.NET开发人员的问题是,自动软件更新会导致这类问题吗?
protected Stream Get1LogoImageStream()
{
Assembly current = Assembly.GetExecutingAssembly();
string imageName = "logo.jpg";
string file = string.Format("{0}.{1}", current.ManifestModule.ScopeName.Replace(".dll", string.Empty), imageName);
return current.GetManifestResourceStream(file);
}
protected Stream Get2LogoImageStream()
{
Assembly current = Assembly.GetExecutingAssembly();
string imageName = "logo.jpg";
string file = string.Format("{0}.{1}", current.ManifestModule.Name.Replace(".dll", string.Empty), imageName);
return current.GetManifestResourceStream(file);
}
答案 0 :(得分:3)
由于.Name仅返回程序集,而.ScopeName返回完整路径,因此可能导致程序需要徽标文件的绝对路径才能运行。
从那里,它可能是很多东西,我的头脑中的想法: 1)你有一个环境变量存储图像的路径,允许它被找到。
2)您移动了图像或装配体,或以某种方式更改了装配体运行的上下文,以便在错误的位置搜索图像。
3)某些.NET更新有可能需要使用完全限定名称,但我对此表示怀疑。
没有更多细节,很难说。
答案 1 :(得分:1)
您能告诉我们 它是如何使用原始实现的?任何特定的例外情况及其消息?
更新:另外,您是否可以进行一些挖掘以了解最近安装了哪些更新?
更新:所以你在谈论将程序集从.NET 2.0转换为3.0 / 3.5而不是Windows自动更新?这是一个很大的不同。
据我所知,.NET 3.0 / 3.5专门设计为完全向后兼容.NET 2.0组件,因此在3.5上运行2.0程序集应该不是问题。如果您指的是升级.NET 2.0项目/解决方案,那么我不确定。
另一种可能性是,.NET 2.0中可能存在一个在.NET 3.5中得到纠正的错误 - 但这纯粹是猜测。
答案 2 :(得分:1)
我首先要使用System.IO
类来处理你正在进行的一些路径操作。 Path类有一个很好的GetFileNameWithoutExtension
方法,它应该(ahem)替换你的Replace
方法调用(或者甚至可能ChangeExtension
,因为这是你似乎试图做的事情。)< / p>
我在Name
和ScopeName
方面看到的主要区别在于后者有完整路径而前者没有。这让我认为这是一种路径问题。
正如其他人所说,您是否可以发布一些更多细节,例如您正在获得的错误/例外?
答案 3 :(得分:0)
GetManifestResourceStream()需要您的资源名称,该名称由Namespace.ResourceName.Ext组成。
由于您必须指定命名空间(而不是程序集名称),因此应将其包含在字符串中:
protected Stream Get2LogoImageStream()
{
Assembly current = Assembly.GetExecutingAssembly();
string file = "YourNamespace.logo.jpg";
return current.GetManifestResourceStream(file);
}