小编Ter*_*ver的帖子

为什么我的.NET 4应用程序知道没有安装.NET 4

我前几天开发了一个针对.NET 4的应用程序,并将XCOPY安装到Windows XP机器上.我告诉机器的所有者他们需要安装.NET Framework 4来运行我的应用程序,他告诉我他做了(不是一个可靠的来源).当我运行应用程序时,我看到一个消息框,说该应用程序需要.NET Framework 4,我想安装它吗?单击是按钮将我带到Microsoft网站,稍后单击几次,安装了.NET 4,并且应用程序已成功启动.

过去,XCOPY将.NET应用程序安装到没有安装正确.NET版本的计算机上,导致应用程序在启动时崩溃,并且没有向用户显示有用的信息.这次为什么不同?

  1. 它是否内置于我的应用程序中,因为我针对.NET X?
  2. 它是否已经安装在目标机器上?

我喜欢这个功能.我想知道将来如何利用它.

.net c# xcopy .net-4.0

25
推荐指数
1
解决办法
2174
查看次数

String仅包含给定的一组字符

我需要知道给定的字符串是否是有效的DateTime格式字符串,因为字符串可能代表其他东西.我试图DateTime.ParseExact(somedate.ToString(格式)格式),认为它会BARF上是无效的格式,但它没有.

所以我很擅长测试字符串是否只包含"yYmMdDsShH"字符.像std :: string.find_first_not_of这样的东西可以工作,但System.String没有这个.

我认为RegEx可以做到这一点,但我对正则表达式非常弱.

请注意,Linq不适用于此版本(仅限.NET 2.0).

更新

为了澄清,我需要知道给定的字符串是否代表日期时间格式,而不是像这样:

if (input == "some special value")
... // it's a special case value
else if (Environment.GetEnvironmentVariable(input))
... // it's an environment variable name
else if (IsDateTimeFormatString(input))
... // it's a date time format string
else if (input.IndexOfAny(Path.GetInvalidPathChars()) < 0)
... // it's a file path
else
   throw new Exception(); // Not a valid input
Run Code Online (Sandbox Code Playgroud)

我可以将DateTime格式字符串限制为仅仅"yYmMdDsShH",或者我也可以在其中添加一些分隔符,这取决于我允许或不允许的内容.

c# regex

21
推荐指数
2
解决办法
3万
查看次数

引用自身的typedef

typedef bool (*Foo)(Foo a, Foo b);
Run Code Online (Sandbox Code Playgroud)

如何声明一个在其参数中接受自身的函数指针?

c++

13
推荐指数
1
解决办法
444
查看次数

VS2010(Express)调试器在控制台应用程序中捕获Ctrl + C.

答案摘要

要避免调试器捕获Ctrl + C,请先关闭Visual Studio Hosting Process(在项目属性,Debug选项卡中找到)

如果您使用的是Visual Studio的Express版本,那就是您所能做的一切.

如果您使用的是Pro或更高版本的Visual Studio,您还可以打开Debug> Exceptions ...,Win32 Exceptions,并取消选中Ctrl + C.

作为替代方案,您可以在调试时使用Ctrl + Break,除非像我这样将Ctrl + C连接到您的大脑.

原版的

以下内容已经过编辑.汉斯似乎已经收回了他的答案,但他的提问帮助我缩小了问题陈述:

额外的清晰度

  • 我不想修改Ctrl + C的行为.
  • 我不是在找工作.
  • 我只是希望在调试会话期间按下Ctrl + C时调试器不会中断.

请注意,以下示例是人为的.这只是为了证明这种行为.我更改了ReadKey系列,因为它让人分心.

调试(运行)以下程序:

class Program
{
    static void Main()
    {
        System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
    }
}
Run Code Online (Sandbox Code Playgroud)

按Ctrl + C. 调试器将中断,就像在Sleep行上设置断点一样.

你怎么关掉这个?我不希望调试器完全违反Ctrl + C.

VS2008 Pro在家中不会发生这种情况.

我现在已经尝试了VS2008 Express和VS2010 Express(我可以轻松测试它的唯一版本),他们都做到了.这让我相信它是一种Express行为,或者是某个地方可以打开/关闭它.

  1. 是否有在任何版本/版本中打开/关闭此设置的设置?
  2. VS2008,VS2010或两者都存在此设置吗?
  3. Express版本中的设置是否公开?
  4. 我的VS2008 Pro实例是否独一无二?设置是在旧版本的Visual Studio中暴露出来的东西(我已经通过许多新版本进行了VS设置).

debugging visual-studio-2010 visual-studio visual-studio-debugging

12
推荐指数
2
解决办法
4684
查看次数

如何在没有清单的情况下启用视觉样式

根据文件:

"如果您希望应用程序使用ComCtl32.dll版本6,则必须添加应用程序清单或编译器指令,以指定如果版本6可用,则应使用该版本."

注意上面的逻辑OR?那么这个神秘的编译器指令是什么?

我有一个原生的Win32 C++应用程序,它完全包含在一个.cpp文件中.没有资源文件,清单文件等.我想保持这种方式,但我也想使用视觉样式.

c++ winapi comctl32 visual-styles

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

嵌入IronPython,内置帮助命令,我的CLR对象

我将IronPython(2.6.1)嵌入到C#程序集中,并将几个对象暴露给使用PythonEngine.ExecuteFile执行的脚本.我暴露他们

scope.SetVariable("SomeObject", new SomeObject())
Run Code Online (Sandbox Code Playgroud)

要么

engine.Execute("from MyNamespace import SomeObject", scope)
Run Code Online (Sandbox Code Playgroud)

取决于脚本如何使用它们.我的应用程序组件被添加到引擎中

engine.Runtime.LoadAssembly(Assembly.GetExecutingAssembly())
Run Code Online (Sandbox Code Playgroud)

现在一个脚本可以执行help(SomeObject)并转储好的小帮助信息(*),但它不完整.没有任何对象的事件或属性(当然是公共的)出现,许多"内置"成员也会丢失.

这是奇怪的部分; 如果我启动ipy.exe并执行以下操作:

import sys
sys.path.append('<location of my app>')
import clr
clr.AddReferenceToFile('myapp.exe')
from MyNamespace import SomeObject
help(SomeObject)
Run Code Online (Sandbox Code Playgroud)

我得到了一个不同的转储,包括所有缺少的成员!

为什么两者不同?

奖金问题:假设我让它正常工作,是否可以在我的CLR对象上添加描述性文本到help()的输出?就像你可以在脚本中,你的python本地类型?我的第一个猜测是DescriptionAttribute,但是没有用.

(*)显然,最终的工作脚本不会这样做,但在编写/测试脚本时它非常有用.

回答

这是一个完整的控制台程序,演示了如何导入网站,用标准的python库help()替换无用的内部help().

using System;
using System.Collections.Generic;
using System.Reflection;
using IronPython.Hosting;
using IronPython.Runtime;
using Microsoft.Scripting.Hosting.Providers;

namespace MyApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // Work around issue w/ pydoc - piping to more doesn't work so instead indicate that we're …
Run Code Online (Sandbox Code Playgroud)

c# ironpython embedding

10
推荐指数
1
解决办法
1629
查看次数

C#volatile和Nullable

根据文档:http://msdn.microsoft.com/en-us/library/x13ttww7.aspx:

volatile关键字可以应用于引用类型.

那么为什么在Nullable<T>...参考类型上使用是非法的!

请注意,我实际上并不需要在Nullable<T>字段上使用volatile语义,我偶然遇到了这个错误并且只是好奇.

c#

10
推荐指数
1
解决办法
729
查看次数

使用初始化语法初始化事件

我经常想写这样的东西:

new Form
{
    Text = "Caption",
    Controls =
    {
        new Button { Text = "Button 1", Click = (s, e) => MessageBox.Show("Button 1 Clicked"), Location = new Point(10, 10) },
        new Button { Text = "Button 2", Click = new EventHandler(Button2Clicked), Location = new Point(10, 40) },
        new Button { Text = "Button 3", Click = Button3Clicked, Location = new Point(10, 70) },
    },
}
Run Code Online (Sandbox Code Playgroud)

初始化器语法只是糖,所以为什么编译器不能弄清楚如何为事件订阅生成代码?

给我一些糖,宝贝!

当发明初始化语法时,有人必须考虑事件并拒绝它们.我一直试图想象理由可能是什么,而且我是空白的.

是因为事件是一个可能有多个订阅者的多播对象吗?不,这是一个初始化过程; 没有其他订阅者.[更新]不正确,初始化程序在构造后应用,对象可以订阅自己的事件.

Eric的一个注释:我听说过为什么C#没有实现X特效.在这种情况下,有人已经在那里,实现初始化器.

更新

似乎存在争用/混淆,因为我 …

c#

7
推荐指数
1
解决办法
4855
查看次数

MSIL是否具有ROL和ROR指令?

我写了一个Int128类型,效果很好。我以为我可以通过一个简单的想法来改进它的性能:改进一些笨拙的换档操作。

因为它们在乘法和除法中大量使用,所以改进会产生连锁反应。因此,我开始创建一个动态方法(低调并高调旋转),只是发现没有OpCodes.Rol或OpCodes.Ror指令。

IL有可能吗?

c# clr cil

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

链接到libusb

我知道这是一件非常简单的事情,我会讨厌自己不得不问它,但我的脑袋却因桌面上的反复点击而痛苦不堪.我已经阅读了几十个stackoverflow和google结果,这些结果表明以下内容应该有效:

$ ls /usr/local/lib/libusb*
/usr/local/lib/libusb-1.0.a   /usr/local/lib/libusb-1.0.so    /usr/local/lib/libusb-1.0.so.0.1.0
/usr/local/lib/libusb-1.0.la  /usr/local/lib/libusb-1.0.so.0
$ gcc -I ~/libusb-1.0.18/libusb -c test.c
$ gcc -L/usr/local/lib -o test test.o -llibusb
/usr/bin/ld: cannot find -llibusb
collect2: error: ld returned 1 exit status
$ gcc -L/usr/local/lib -o test test.o -llibusb-1.0
/usr/bin/ld: cannot find -llibusb-1.0
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

为什么这不正确?其中一个应该有效,我尝试了很多很多变化.

为了完整性,我正在运行Ubuntu 14.04(新的VM安装).

我从源代码(〜/ libusb-1.0.18)构建了libusb:

./configure --disable-udev
make
sudo make install
Run Code Online (Sandbox Code Playgroud)

linker gcc

3
推荐指数
1
解决办法
5489
查看次数