小编Gan*_* R.的帖子

为什么在VS 2010和VS 2012中构建的应用程序的行为存在差异?

我正在检查在我们的构建机器上安装.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 …

.net visual-studio-2010 visual-studio-2012

19
推荐指数
2
解决办法
2355
查看次数

Java中的C#"is"运算符替代

在C#中,当我想知道对象是否是特定类型的实例时,我可以使用"is"运算符:

String foo = "hi :)"
if (foo is String) ...
Run Code Online (Sandbox Code Playgroud)

我怎么能在java中做到这一点?(我知道我可以使用try语句,任何其他方式?)

java casting

18
推荐指数
5
解决办法
6011
查看次数

位于磁盘上的Environment.FailFast()创建的应用程序转储在哪里?

我试图在我的应用程序中使用Environment.FailFast().MSDN文档说它在应用程序终止期间创建了一个应用程序转储.

FailFast方法将消息字符串写入Windows应用程序事件日志,创建应用程序的转储,然后终止当前进程.消息字符串也包含在向Microsoft的错误报告中.

有人可以指引我到创建转储的位置吗?

.net c# event-log

9
推荐指数
1
解决办法
991
查看次数

如何在托管C++/CLI项目中修复CA2123(覆盖链接需求应与基础相同)

我无法理解如何为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)

.net c++-cli .net-4.0 code-access-security

9
推荐指数
1
解决办法
1746
查看次数

我们可以创建一个VC++可执行文件,它可以在32位和64位Windows上本机工作吗?

有没有办法构建VC++项目,以便它创建的dll/exe将作为32位Windows操作系统上的32位应用程序和64位Windows操作系统(不是WOW64)上的64位应用程序.

我知道使用/ ANYCPU选项的C#应用​​程序是可能的.

c++ compatibility visual-studio-2010 32bit-64bit visual-c++

7
推荐指数
2
解决办法
365
查看次数

数字签名后,受管Windows服务启动缓慢

我们最近尝试对.NET二进制文件进行数字签名。我们有一个Windows服务,通常会在10秒内启动。但是,当我们开始对其进行数字签名后,时间增加到20-30秒左右。

谷歌搜索导致我这样:http : //support.microsoft.com/kb/936707,它基本上说我必须将generatePublisherEvidence设置为false。

但是在MSDN上对generatePublisherEvidence描述指出了这样的事实,即它不适用于.NET 4。我再次检查了我的二进制文件是否针对.NET 4。

有人可以向我解释这种行为吗?

.net performance .net-4.0 authenticode digital-signature

7
推荐指数
2
解决办法
1414
查看次数

如何在基于WPF Prism的应用程序中使用.NET 4 SplashScreen?

我试图在基于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 ".

.net c# wpf prism

5
推荐指数
1
解决办法
4988
查看次数

DCOM服务器无法注册

我收到了这个错误

来源:DCOM
Event_ID:10010

"服务器{6FC4FDAE-96C8-11D3-9F9C-005004053207}未在所需的超时时间内向DCOM注册."

这是针对特定的exe,当本地系统运行时工作正常但在非内置管理员下运行失败时.我需要exe在非内置管理员下运行.

目前我在使用Citrix的Win 2k3机器上遇到此问题.

但是我之前也在XP机器上遇到过这个问题.

解决问题的任何提示?

dcom

4
推荐指数
1
解决办法
4万
查看次数

调试主线程时为什么工作线程不执行?

我创建了一个控制台测试应用程序,它创建一个对象并在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# multithreading

2
推荐指数
1
解决办法
2717
查看次数

当应用程序使用对 Environment.FailFast 的调用退出时,会显示未知的硬错误消息

我们有一个 C# 应用程序,它连接到 AppDomain.UnhandlerExceptions 并侦听应用程序中任何未处理的异常。一旦出现未处理的异常,它就会向用户显示错误消息,并通过调用Environment.FailFast 终止应用程序。

问题是,在某些计算机上,这会导致向用户显示“未知硬错误”消息,并且应用程序不会退出,直到我们单击“确定”。

操作系统是 Windows 7 x64,带有 .NET 4 应用程序。

.net c# termination

2
推荐指数
1
解决办法
2576
查看次数