我正在检查在我们的构建机器上安装.NET 4.5是否会更改VS 2010生成的输出IL映像.
因为我知道在.NET 4.5中foreach的行为已经改变以避免由于访问修改闭包引起的问题,所以我选择了一个展示该行为的简单应用程序.
class Program
{
private static void Main(string[] args)
{
var contents = new List<Func<int>>();
var s = new StringBuilder();
int[] values = new int[] { 4, 5, 6 };
foreach (int value in values)
{
contents.Add(() => value);
}
for (var k = 0; k < contents.Count; k++)
s.Append(contents[k]());
Console.WriteLine(s);
}
Run Code Online (Sandbox Code Playgroud)
VS 2010输出:666
VS 2012输出:456
我在VS 2010中创建了一个控制台应用程序,在VS 2012中创建了一个具有相同代码的控制台应用程序(都是针对.NET 4).
但是,两个控制台应用程序都基于它们构建的IDE表现出不同的行为.在构建输出中,我检查了两者都有几乎相似的构建参数.所以我想知道最终可执行文件如何表现出不同的行为?.NET 4.5是就地升级,因此两个IDE的编译器必须相同.
注意:我确实看过一个相关的问题:VS 2010和VS 2012中的不同LINQ答案,但它没有回答我关于可执行行为不同的问题.
编辑1: 正如mletterle所提到的,我确实尝试在VS 2010命令提示符中使用VS …
在C#中,当我想知道对象是否是特定类型的实例时,我可以使用"is"运算符:
String foo = "hi :)"
if (foo is String) ...
Run Code Online (Sandbox Code Playgroud)
我怎么能在java中做到这一点?(我知道我可以使用try语句,任何其他方式?)
我试图在我的应用程序中使用Environment.FailFast().MSDN文档说它在应用程序终止期间创建了一个应用程序转储.
FailFast方法将消息字符串写入Windows应用程序事件日志,创建应用程序的转储,然后终止当前进程.消息字符串也包含在向Microsoft的错误报告中.
有人可以指引我到创建转储的位置吗?
我无法理解如何为C++/CLI项目修复CA2123.这是一个演示该问题的示例项目:
1)创建一个C#(.NET 4)类库
ManagedClass.cs
namespace CSharpLibrary {
public interface IManagedClass
{
void WriteSomething();
}
public class ManagedClass : IManagedClass
{
public void WriteSomething()
{
}
}
Run Code Online (Sandbox Code Playgroud)
}
2)创建C++/CLI控制台应用程序(VS 2010):
AssemblyInfo.cpp
#include "stdafx.h"
using namespace System;
using namespace System::Reflection;
using namespace System::Runtime::CompilerServices;
using namespace System::Runtime::InteropServices;
using namespace System::Security;
[assembly:AssemblyTitleAttribute("CPlusPlusCLIConsoleApp")];
[assembly:AssemblyDescriptionAttribute("")];
[assembly:AssemblyVersionAttribute("1.0.*")];
[assembly:ComVisible(false)];
[assembly:CLSCompliantAttribute(false)];
[assembly:SecurityCritical];
Run Code Online (Sandbox Code Playgroud)
CPlusPlusCLIConsoleApp.h
#pragma once
using namespace CSharpLibrary;
using namespace System::Security;
typedef void* (__cdecl FACTORY_PROC)();
namespace CPlusPlusCLIConsoleApp
{
public ref class MainClass : public IManagedClass
{
public:
[SecurityCritical]
virtual …Run Code Online (Sandbox Code Playgroud) 有没有办法构建VC++项目,以便它创建的dll/exe将作为32位Windows操作系统上的32位应用程序和64位Windows操作系统(不是WOW64)上的64位应用程序.
我知道使用/ ANYCPU选项的C#应用程序是可能的.
我们最近尝试对.NET二进制文件进行数字签名。我们有一个Windows服务,通常会在10秒内启动。但是,当我们开始对其进行数字签名后,时间增加到20-30秒左右。
谷歌搜索导致我这样:http : //support.microsoft.com/kb/936707,它基本上说我必须将generatePublisherEvidence设置为false。
但是在MSDN上对generatePublisherEvidence的描述指出了这样的事实,即它不适用于.NET 4。我再次检查了我的二进制文件是否针对.NET 4。
有人可以向我解释这种行为吗?
我试图在基于Prism的WPF应用程序中使用.NET 4 SplashScreen.我通过将图像上的构建操作设置为SplashScreen来使用SpashScreen.
该应用程序过去一直在崩溃System.Resources.MissingManifestResourceException.最后我发现如果我在App.Xaml文件中添加一个StartupUri ="MainWindow.xaml",SplashScreen就可以了.
<Application x:Class="Application"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml">
</Application>
Run Code Online (Sandbox Code Playgroud)
但在prism应用程序中,我们不能拥有StartupUri.一切都在Bootstrapper中完成.
那么我需要手动操作StartupUri才能使SplashScreen工作?
更新1:完整的异常消息是:
System.Resources.MissingManifestResourceException未处理
消息=无法找到适合指定文化或中性文化的任何资源.确保在编译时将"Application.g.resources"正确嵌入或链接到程序集"Application"中,或者所有所需的附属程序集都是可加载和完全签名的.
更新2: 我已经想出添加或删除StartupUri并不重要.重要的是我在App.Resources标记中有一个额外的WPF窗口(App.xaml除外)或2个虚拟条目.
<Application.Resources>
<Style x:Key="Dummy"/>
<Style x:Key="Dummy1"/>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
如果我不这样做,Application.g.resources文件不会在obj文件中创建,因此不会嵌入到可执行文件中.这篇博客文章引起了我的注意,添加了两个虚拟资源条目.
更新3:
我的问题是关于MSDN论坛回答了鲍勃宝在这里.肯特也试图指出我的方向相同.
不要将图像的构建操作设置为SplashScreen.代替:
将App OnStartup方法中的代码添加为:
protected override void OnStartup(StartupEventArgs e)
{
SplashScreen splashScreen = new SplashScreen("splashscreen.png");
splashScreen.Show(true);
base.OnStartup(e);
Bootstrapper bootstrapper = new Bootstrapper();
bootstrapper.Run();
}
Run Code Online (Sandbox Code Playgroud)
"splashscreen.png"是项目中的一个图像,其" Build Action "是" Resource ".
我收到了这个错误
来源:DCOM
Event_ID:10010"服务器{6FC4FDAE-96C8-11D3-9F9C-005004053207}未在所需的超时时间内向DCOM注册."
这是针对特定的exe,当本地系统运行时工作正常但在非内置管理员下运行失败时.我需要exe在非内置管理员下运行.
目前我在使用Citrix的Win 2k3机器上遇到此问题.
但是我之前也在XP机器上遇到过这个问题.
解决问题的任何提示?
我创建了一个控制台测试应用程序,它创建一个对象并在2个独立的线程上调用2个函数.一个线程以相反的顺序打印1-20形式的数字.
问题是,在调试第一个工作线程之前,我没有停止调试主线程(即我按f5).任何答案?
class Program
{
static void Main(string[] args)
{
DisplayData dd = new DisplayData();
ThreadStart ts1 = new ThreadStart(dd.DisplayNumber);
Thread t1 = new Thread(ts1);
t1.Name = "Display Numbers";
ThreadStart ts2 = new ThreadStart(dd.ReverseNumbers);
Thread t2 = new Thread(ts2);
t2.Name = "Reverse Numbers";
t1.Start(); //Keep 1st break point at this location. Then press F10.
t2.Start(); //Keep break point at this location permanently
}
public class DisplayData
{
public void DisplayNumber()
{
int length = 20;
Console.WriteLine("\nNumbers in correct order.\n");
for …Run Code Online (Sandbox Code Playgroud) 我们有一个 C# 应用程序,它连接到 AppDomain.UnhandlerExceptions 并侦听应用程序中任何未处理的异常。一旦出现未处理的异常,它就会向用户显示错误消息,并通过调用Environment.FailFast 终止应用程序。
问题是,在某些计算机上,这会导致向用户显示“未知硬错误”消息,并且应用程序不会退出,直到我们单击“确定”。
操作系统是 Windows 7 x64,带有 .NET 4 应用程序。
.net ×6
c# ×4
.net-4.0 ×2
32bit-64bit ×1
authenticode ×1
c++ ×1
c++-cli ×1
casting ×1
dcom ×1
event-log ×1
java ×1
performance ×1
prism ×1
termination ×1
visual-c++ ×1
wpf ×1