假设我有一个像这样的错误应用程序:
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("2 + 1 = {0}", Add(2, 1));
}
static int Add(int x, int y)
{
return x + x; // <-- oops!
}
}
}
Run Code Online (Sandbox Code Playgroud)
该应用程序已经编译并部署到野外.有人找到了这个bug,现在他们要求修复它.虽然我可以使用修复程序重新部署此应用程序,但由于我无法控制的原因,这是一个极端的麻烦 - 我只是想为bug编写补丁.
具体来说,我想将自己的MSIL插入有问题的assmembly源文件中.我之前从未做过这样的事情,谷歌搜索没有发现任何有用的信息.如果我能在上面的代码中看到如何执行此操作的示例,它将极大地帮助我:)
如何以编程方式将我自己的MSIL注入已编译的.NET程序集中?
[编辑添加:]对于那些问:我不需要运行时hotswapping.对我来说完全没问题,关闭应用程序,操纵程序集,然后重新启动程序.
[编辑一次:]看起来普遍的共识是"操纵程序集是修补程序的一种坏方法".如果这是一个坏主意,我不会走那条路.
我将问题保持开放,因为MSIL注入可能仍然有用于其他目的:)
什么是使用C#从摄像机捕获视频流的最简单,最快捷的方法?
它不会删除第二个表单标记内的所有内容,只是隐藏页面中的标记和标记
任何想法和解决方法?
假设我有计划和文件
Dim myPlans = _context.Plans.Where(predicate1)
Dim myDocuments = _context.Documents.Where(predicate2)
Run Code Online (Sandbox Code Playgroud)
我使用PredicateBuilder为每个子句构造了where子句.因此,myPlans和myDocuments具有正确的SQL语句.
我想做的是将这两个表连接成一个linq语句.我遇到的问题是,默认情况下AND条件是加入where子句.
myPlans Where子句:( p.name喜欢"%test%"和p.name喜欢"%bed%")或(p.description喜欢"%test%"和p.description喜欢"%bed%")
myDocuments Where子句:( d.name喜欢"%test%"和d.name喜欢"%bed%")或(d.描述如"%test%"和d.description如"%bed%")
当我将两个结合起来时,期望的结果Where子句是:
Where(d.ID = p.ID)AND(上面的myplans where子句)OR(上面的mydocument where子句).意思是,我希望每个表中的两个where子句是"或"而不是"And".
当前结果where子句是:Where(d.ID = p.ID)AND(上面的myplans where子句)AND(上面的mydocument where子句).意思是,我希望每个表中的两个where子句是"或"而不是"And".
我正在形成这样的声明:
Dim test = From d in myDocuments _
Join p in MyPlans on d.ID Equals p.ID _
Select d.Name, p.Name
Run Code Online (Sandbox Code Playgroud) 我发现了一些很棒的文章(Maoni,Richter#1,Richter#2)给出了关于GC的理论和实践的许多细节,但我找不到任何说明如何设置GC线程优先级的内容.
我发现的最接近的是这个表明Finalizer线程"以异步方式运行到应用程序并且具有高优先级".
我一直以为它是一个"低优先级"的线程,但是阅读越来越多关于它似乎是错误的(因为GC必须阻止所有其他线程,并且你不希望你的应用程序依赖于一个低优先级的线程,以便及时恢复).
有谁知道确切知道实际的优先级应该是什么?
当我更新(使用flush)从数据库中检索的记录列表中的一条记录时,nHibernate正在对原始列表中的所有记录进行版本控制.
从数据库中检索记录列表:
using(UnitOfWork.Start())
{
queuedJobs = aJobServiceManager.GetAllJobs().Where(aJob => aJob.Status == PricingStatus.QUEUED).ToList();
}
/* Do some work on the record*/
using(UnitOfWork.Start())
{
//aJob is a record from queuedJobs.
aJobServiceManager.Save(aJob);
//When Flush is called I'm expecting only aJob to be updated in the database.
//aJob is correctly updated BUT
//All the other records in queuedJobs are also updated (their version field is incremented).
UnitOfWork.Current.Flush();
}
Run Code Online (Sandbox Code Playgroud)
为什么nHibernate在没有更改时更新所有记录,如何阻止此行为?
当 URL 共享时,社交网络可以很好地从网站中提取标题和描述,但对于图像,仍然需要创建自定义元标记:property="og:image" name="twitter:image" itemprop="image". 我的问题是,这行得通吗?
<meta property="og:image" name="twitter:image" itemprop="image" content="http://example.com/image.jpg" />
Run Code Online (Sandbox Code Playgroud)
因此,我不必为网站上的每个网页创建 3 个不同的元标记。
我下载了zlib.NET,我必须导入一个文件,名为"zlib.net.dll".
我的问题是:如何导入该文件,以便在C#Express 2008中使用它,如"System.zlib.etc"?
谢谢.
我是在想 ..
我有这样的对象
public class Entry{
public DateTime? Date { get; set;} // This is just Date
public DateTime? StartTime { get; set; } //This is just Time
public TimeSpan Duration { get; set; } //Time spent on entry
}
Run Code Online (Sandbox Code Playgroud)
是否有比DateTime更合适的类型或更好的策略来处理时间和日期?没有必须在我的所有开始和结束时间添加DateTime.MinDate()的痛苦?
---更新---
1 - 我希望能够在Entry对象上请求Date或StartTime是否为Null.
2 - 输入应允许用户输入持续时间而不指示日期.即使像DateTime.MinDate()这样的默认日期也似乎是一个糟糕的设计.(这就是为什么我选择TimeSpan而不是Start和EndTime)
在Fredrik的博客文章中,他有一个C#if语句的例子
@if (WebSecurity.IsAuthenticated) {
<li><a href="/user/login">Log in</a></li>
} else {
<li><a href="/user/logout">Log out</a></li>
}
Run Code Online (Sandbox Code Playgroud)
但在VB中我似乎无法弄清楚如何做同样的事情
@If (HttpContext.Current.User.Identity.IsAuthenticated) Then
<div id="dialog-confirm" title="Log Out">
<div class="alert" title="Alert">
</div>
Are you sure?</div>
End If
Run Code Online (Sandbox Code Playgroud)
这个节目表明我的内部HTML标记是错误的.
基本上以下是有效的
@If (HttpContext.Current.User.Identity.IsAuthenticated) Then
End If
Run Code Online (Sandbox Code Playgroud)
但if语句中的任何内容都被视为"代码"而不是"标记".我需要的是能够将标记放在那里.
有谁知道如何在Razor VB中做一个正确的if语句?
课程:
class Foo
{
public int Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
名单
List<Foo> lst = new List<Foo>();
Run Code Online (Sandbox Code Playgroud)
数据表:
DataTable dt = GetFromDb ()....
Run Code Online (Sandbox Code Playgroud)
我想填写lst来自的记录dt.
我做过:
Array.ForEach(dt.AsEnumerable().ToArray(), y = > lst.Add(new Foo()
{
Id = int.Parse(y["id"].ToString()), Name = y["name"].ToString()
}));
Run Code Online (Sandbox Code Playgroud)
题 :
dt.AsEnumerable().Select(_ => fill lst )吗?我知道选择签名的一部分(在这种情况下)是Func<datarow,void>不会编译的
但是,除了我的丑陋方式之外,还有其他办法吗?
我有一个现有的数据库,我想迁移到EF CTP5.我遇到的问题是,当我插入现有数据时,我需要它移动保留当前身份主键以用于其他外键约束.
我想使用EF CTP5代码进行迁移,因此我不必编写大量SQL,甚至不必在SSIS包中包含它.
我试图使用sql语法:
SET IDENTITY_INSERT tableName ON
SET IDENTITY_INSERT tableName OFF
但是,当调用DbContext.SaveChanges()时,上述语法在不同的连接中发生,并且标识列由EF CTP5框架控制,即使在指定ID时也是如此.
是否有一种方法可以禁用或删除与以下类似的对象的身份约定,但是在运行时而不是在实例化数据库时:
public class BlogContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<StoreGeneratedIdentityKeyConvention>();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
c# ×4
.net ×3
linq ×2
vb.net ×2
.net-3.5 ×1
asp.net ×1
camera ×1
cil ×1
date ×1
datetime ×1
html ×1
if-statement ×1
import ×1
linq-to-sql ×1
microdata ×1
nhibernate ×1
razor ×1
schema.org ×1
time ×1
twitter-card ×1
webforms ×1
where ×1