1,创建并构建默认的Windows窗体项目并查看项目属性.它说该项目的目标是.NET Framework 2.0.
2,创建一个安装项目,只安装Windows窗体项目中的单个可执行文件.
3,运行该安装程序,它总是说它需要在机器上安装.NET 3.5 SP1.但它显然只需要2.0,所以我不希望客户在不需要时安装.NET 3.5.他们可能已经安装了2.0,因此强制升级是不可取的!
我已经查看了安装项目的先决条件并检查了.NET Framework 2.0条目,其余的都未选中.所以我找不到这个奇怪的运行时要求的任何原因.有谁知道如何解决这个问题?
关于解决大型网站的扩展问题,我听过几次提到的"碎片"技术.什么是'碎片'技术,为什么这么好?
我正在使用Visual Studio 2013构建一个使用React和JSX作为用户界面的网站.这一切都运行正常,但由于.jsx文件被视为纯文本,因此开发环境较慢.所以没有语法高亮,你不能设置断点来帮助调试.
有没有办法改善这种体验,还是我必须切换到jsx文件的另一个编辑器?
我正在使用LINQ to Objects,并想知道是否可以通过使用我拥有的索引来提高查询的性能.最好用一个例子来解释.想象一个简单的类型......
public class Person
{
public int Age;
public string FirstName;
public string LastName;
}
Run Code Online (Sandbox Code Playgroud)
一个简单的查询我会反对它...
List<Person> people = new List<Person>();
// 'people' populated with 50,000 instances...
var x = from t in people
where t.Age > 18 && t.Age < 21
select t;
Run Code Online (Sandbox Code Playgroud)
如果我正确理解LINQ to Objects,那么Where扩展方法的实现将枚举people集合中的所有50,000个实例,以便找到实际匹配的100个实例.碰巧我已经有一个按年龄排序的人员集合的索引.像这样...
SortedList<int, Person> ageSorted = new SortedList<int, Person>();
Run Code Online (Sandbox Code Playgroud)
很明显,如果我可以获得在哪里使用SortedList以便它不再需要枚举所有50,000个实例,而是找到100个匹配条目的范围,从而节省时间.
是否可以将LINQ扩展到Objects来实现我的情况?它已经可以但我错过了这项技术吗?
调用我的Web服务使用以下代码以确保调用者具有有效的会话.如果找到有效会话,则会更新会话详细信息并保存更改.一切都很简单,工作正常.
// Create the Entity Framework context
using(MyContext ctx = CreateMyContext())
{
// Get the user session for the client session
UserSession session = (from us in context.UserSessions.Include("UserEntity")
where us.SessionId = callerSessionId
select us).FirstOrDefault<UserSession>();
if (session == null)
return false;
else
{
// Update session details
session.Calls++;
session.LastAccessed = DateTime.Now.Ticks;
Console.WriteLine("Call by User:{0}", session.UserEntity.Name);
// Save session changes back to the server
ctx.SaveChanges();
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常,直到相同的调用者,因此相同的会话,进行多个并发调用(这是完全有效的).在这种情况下,我有时会遇到僵局.使用SQL Server Profiler我可以看到发生以下情况.
呼叫者A执行选择并获取用户会话上的共享锁.呼叫者B执行选择并在同一用户会话上获取共享锁.由于来电者B的共享锁定,来电者A无法执行更新.由于呼叫者A的共享锁,呼叫者B无法执行其更新.僵局.
这似乎是一个简单而经典的死锁场景,必须有一个简单的方法来解决它.当然,几乎所有真实世界的应用程序都有同样的问题.但是我没有提到任何有关死锁的实体框架书籍.
我希望使用Windows Azure和SQL Azure构建一个新网站.有没有人知道我可以用作Web角色的任何商业或免费CMS系统,它们将连接并使用SQL Azure作为存储?
根据Microsoft文档,当线程(来自线程池或使用System.Threading.Thread类创建)发生未处理的异常时,应触发AppDomain.UnhandledException事件以获取应用程序的默认AppDomain.这是MSDN 链接,它在第二个注释部分之后解释它.
但我无法重现这种行为,据我所知,从我的测试应用程序中它永远不会在默认的AppDomain或用于创建线程的AppDomain上触发UnhandledException.文档是错的还是我的测试代码?
using System;
using System.Runtime.ExceptionServices;
using System.Reflection;
public class Program
{
static void Main()
{
Program.HookAppDomainExceptions();
Test t = CreateTestInsideAppDomain("Nested1");
t.SetupNested1();
Console.ReadLine();
}
public static Test CreateTestInsideAppDomain(string appDomainName)
{
AppDomain nested1 = AppDomain.CreateDomain(appDomainName);
string executingName = Assembly.GetExecutingAssembly().FullName;
return (Test)nested1.CreateInstanceAndUnwrap(executingName, "Test");
}
public static void HookAppDomainExceptions()
{
AppDomain.CurrentDomain.FirstChanceException +=
new EventHandler<FirstChanceExceptionEventArgs>(FirstChanceException);
AppDomain.CurrentDomain.UnhandledException +=
new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
}
public static void FirstChanceException(object sender, FirstChanceExceptionEventArgs e)
{
Console.WriteLine("Domain:{0} FirstChanceException Handler",
AppDomain.CurrentDomain.FriendlyName);
}
public static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine("Domain:{0} …Run Code Online (Sandbox Code Playgroud) 我试图发现ExecutionContext如何在.NET Framework 4.0及更高版本中实际工作.文档说当使用Thread.Start和大多数线程池操作时,托管原则,同步,区域设置和用户上下文都流向新线程.但我不能在实践中看到这一点.
这是一个简单的控制台应用程序,用于测试启动新线程时同步上下文和托管原则是否流动...
static void Main(string[] args)
{
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("One"), null);
Thread t1 = new Thread(new ThreadStart(ThreadRun));
t1.Start();
t1.Join();
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("Two"), null);
AsyncFlowControl aFC = ExecutionContext.SuppressFlow();
Thread t2 = new Thread(new ThreadStart(ThreadRun));
t2.Start();
t2.Join();
aFC.Undo();
Console.Read();
}
static void ThreadRun()
{
Console.WriteLine("ThreadRun Id={0} Context={1} Principle={2}",
Thread.CurrentThread.ManagedThreadId,
(SynchronizationContext.Current != null),
Thread.CurrentPrincipal.Identity.Name);
}
Run Code Online (Sandbox Code Playgroud)
结果是......
ThreadRun Id=11 Context=False Principle=One
ThreadRun Id=12 Context=False Principle=Two
Run Code Online (Sandbox Code Playgroud)
因此,同步上下文永远不会流动,并且即使在您指定它时,托管原则也始终会流动.基本上文档是完全错误的.那么是否描述了ExecutionContext在现实中的作用以及它为何有用?
将对象分配给Content控件时,它将实现适合该已分配对象的Visual.有没有一种程序化的方法来实现相同的结果?我想在WPF中使用一个对象调用一个函数并返回一个Visual,其中在生成Visual时应用相同的逻辑,就像您已将对象提供给Content控件实例一样.
例如,如果我有一个POCO对象并将其分配给Content控件并且恰好定义了相应的DataTemplate,那么它将实现该模板以创建Visual.我希望我的代码能够获取POCO对象并从WPF中获取Visual.
有任何想法吗?
C#规范说,对于32位类型和更小的(以及参考),读取和写入是原子的.因此,如果我的类中有一个Int32字段,我知道多个线程可以读取和写入它,并且它们将在运行中处于原子状态,因此值始终是一致的(尽管缓存问题是一个潜在的问题,但这不是重点这个问题).
在64位系统上也是如此吗?如果我为64位编译我的应用程序是否意味着Int64仍然被认为不是原子的?或者我现在可以认为Int64在读/写中是原子的,因为它是在64位系统上编译并运行的吗?