为.NET WinForms应用程序创建自动更新功能时,它如何更新DLL而不影响当前运行的应用程序?
由于应用程序在更新过程中运行,因此不会锁定DLL(因为在更新期间必须覆盖这些DLL).
我看过很多关于.NET 3.5 SP1变化的帖子,但发现了一个我昨天还没有看到文档的帖子.我的代码在我的机器上工作得很好,从VS,msbuild命令行,一切,但它在构建服务器上运行失败(运行.NET 3.5 RTM).
[XmlRoot("foo")]
public class Foo
{
static void Main()
{
XmlSerializer serializer = new XmlSerializer(typeof(Foo));
string xml = @"<foo name='ack' />";
using (StringReader sr = new StringReader(xml))
{
Foo foo = serializer.Deserialize(sr) as Foo;
}
}
[XmlAttribute("name")]
public string Name { get; set; }
public Foo Bar { get; private set; }
}
Run Code Online (Sandbox Code Playgroud)
在SP1中,上面的代码运行得很好.在RTM中,您会收到InvalidOperationException:
无法生成临时类(result = 1).错误CS0200:属性或索引器'ConsoleApplication2.Foo.Bar'无法分配 - 它是只读的
当然,使其在RTM下运行所需的只是将[XmlIgnore]添加到Bar属性.
我的google fu显然无法找到这些变化的文档.是否有任何列出此更改的更改列表(以及类似的引擎盖下的更改,可能会跳起来并大喊"问题")?这是一个错误还是一个功能?
编辑:在SP1中,如果我添加了一个<Bar />
元素,或者为Bar属性设置了[XmlElement],它将不会被反序列化.它在尝试反序列化时不会在SP1之前失败 - 它在构造XmlSerializer时抛出异常.
这让我更倾向于它是一个bug,特别是如果我为Foo.Bar设置[XmlElement]属性.如果它无法做我要求它做的事情,它应该抛出异常而不是默默地忽略Foo.Bar.XML序列化属性的其他无效组合/设置会导致异常.
编辑:谢谢TonyB,我不知道设置临时文件的位置.对于那些在将来遇到类似问题的人,您需要一个额外的配置标志:
<system.diagnostics>
<switches>
<add name="XmlSerialization.Compilation" …
Run Code Online (Sandbox Code Playgroud) 我正在使用较旧版本的NHibernate(v3.0.0.1001)而且我坚持使用它,因为新的LINQ提供程序打破了我的一些查询(稍后我将尝试修复).我想更新一个使用NHibernate v3.1.0.4000的库.
我尝试在App.config中添加绑定重定向:
<?xml version="1.0"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-3.1.0.4000" newVersion="3.0.0.1001"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
但是当我编译时,我得到:
error CS1705: Assembly 'My3rdPartyDll, Version=0.5.0.170, Culture=neutral, PublicKeyToken=null' uses 'NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4' which has a higher version than referenced assembly 'NHibernate, Version=3.0.0.1001, Culture=neutral, PublicKeyToken=aa95f207798dfdb4'
是否可以使用绑定重定向指向降级?
可能重复:
在Windows窗体的文本标签中输入"&"符号?
在标签控件绑定到用户填充属性的屏幕上,我在标签上加下划线字符(助记符),因为基础数据包含&符号.
例如,如果绑定属性包含"A&B Trucking",则标签显示为"AB Trucking",B带有下划线.键盘上的Alt-B会聚焦该标签.
你如何防止绑定控件发生这种情况?
我正在FoxPro和远程SQL Server之间同步数据.一切都运行良好,但在FoxPro方面,如果我能够检测到不需要考虑同步的记录,它会快得多.我计算一个散列值,以与最后已知的散列进行比较,因此对于加载的记录,它很容易.我想要做的是在加载记录之前过滤掉记录,方法是检查updated
上一次同步开始时间的列.
如何updated
在每次对行进行更改时将列添加到当前日期和时间的VFP 9表中?
我知道你们中的一些人会说这不是正确的方法,但我在一个紧迫的截止日期前完成一个应用程序,截至目前我无法返回并修改代码将图像存储在目录中.
现在已经清除了
我的问题是我输入一个图像插入数据库.
(不介意类安全调用,如果数据有效,所有正在进行的操作都会进行一些检查)
$filename = $security->secure($_FILES['imgschool']['name']);
$tmpname = $security->secure($_FILES['imgschool']['tmp_name']);
$imgsize = $security->secure($_FILES['imgschool']['size']);
$imgtype = $security->secure($_FILES['imgschool']['type']);
$school = $security->secure($_POST['school']);
//begin upload
if($imgsize > 0) {
$handle = fopen($tmpname, "r");
$content = fread($handle, filesize($tmpname));
$content = addslashes($content);
//code to add all this to database
}
Run Code Online (Sandbox Code Playgroud)
变量$ content是图像,它的所有内容都是addslashes.我记得有人曾经提到过用base64做的事,但我几乎无法回想起它是如何写的.
这就是我从数据库调用图像的方式
除了所有的查询,这是调用图像的主要部分
header("Content-length: ".$imgsize);
header("Content-type: ".$imgtype);
header("Content-Disposition: attachment; filename=".$imgname);
print $row['img'];
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,而不是图像显示.网址只显示,所以在这种情况下我只看到这个
HTTP://localhost/admin/school-catalog.php页=图库&ID = 4
打开页面时,使用url中设置的正确参数查看图像.
对于那些想要查看正在进行的查询以保存图像的人等等,我复制了整个部分
//save image to db
if(isset($_POST['btnupload'])) {
$filename = $security->secure($_FILES['imgschool']['name']);
$tmpname = $security->secure($_FILES['imgschool']['tmp_name']);
$imgsize = $security->secure($_FILES['imgschool']['size']);
$imgtype = …
Run Code Online (Sandbox Code Playgroud)