小编Dar*_*ryl的帖子

如何在构建服务器上构建.sqlproj项目?

我有许多需要在我们的构建服务器上构建的.sqlproj项目.我不想在构建服务器上安装所有Visual Studio,因此我可以安装SSDT来构建这些.如何在没有完整的VS安装的情况下构建.sqlproj项目?

这是我尝试在没有安装SSDT的情况下构建时在构建服务器上获得的原始错误:

C:\MyProject\MyProj.sqlproj (4): The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
Run Code Online (Sandbox Code Playgroud)

build-server sql-server-data-tools

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

展平IEnumerable <IEnumerable <>>; 理解泛型

我写了这个扩展方法(编译):

public static IEnumerable<J> Flatten<T, J>(this IEnumerable<T> @this) 
                                           where T : IEnumerable<J>
{
    foreach (T t in @this)
        foreach (J j in t)
            yield return j;
}
Run Code Online (Sandbox Code Playgroud)

下面的代码导致编译时错误(找不到合适的方法),为什么?:

IEnumerable<IEnumerable<int>> foo = new int[2][];
var bar = foo.Flatten();
Run Code Online (Sandbox Code Playgroud)

如果我实现如下扩展,我没有编译时错误:

public static IEnumerable<J> Flatten<J>(this IEnumerable<IEnumerable<J>> @this)
{
    foreach (IEnumerable<J> js in @this)
        foreach (J j in js)
            yield return j;
}
Run Code Online (Sandbox Code Playgroud)

编辑(2):我考虑回答这个问题,但它提出了另一个关于重载决策和类型约束的问题.我在这里提出这个问题:为什么类型约束不是方法签名的一部分?

c# generics ienumerable nested-generics

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

如何确定文件是否是.NET中的图像文件?

我不想依赖文件扩展名.我不知道它是什么类型的图像(.jpg,.png等),我只是想知道文件是否是图像.如果可能的话,我宁愿不使用任何非.NET dll.

我知道如何做到这一点的最好方法如下:

bool isImageFile;
try
{
    Image.FromFile(imageFile).Dispose();
    isImageFile = true;
}
catch (OutOfMemoryException)
{
    isImageFile = false;
}
Run Code Online (Sandbox Code Playgroud)

如上所述:http://msdn.microsoft.com/en-us/library/stf701f5.aspx,如果文件不是有效的图像格式,则Image.FromFile()抛出一个OutOfMemoryException.使用上面给出了我想要的结果,但是由于以下原因我不想使用它:

  • 我认为,出于性能原因,使用try-catches进行正常程序执行是一种不好的做法.
  • Image.FromFile()将整个图像文件(如果是图像文件)加载到内存中.这是浪费我假设因为我只需要文件类型,并且在我的代码中此时不需要进行任何进一步的图像处理.
  • 我不喜欢捕捉OutOfMemoryExceptions,因为如果有一个真正的内存不足问题,我的程序吞下它并继续前进?

有没有更好的方法来做到这一点?或者,我上面列出的任何/所有问题都是无根据的?

编辑:自从收到答案后,这些是我现在知道的三个解决方案:

  1. 通过Image.FromFile()try-catch 将整个图像加载到内存中.
    • 优点:对图像文件内容进行更深入的检查; 涵盖了许多图像类型.
    • 缺点:最慢; 从try-catch开始并将完整的映像文件加载到内存中; 捕获'真实'OutOfMemoryException的潜在危险.
  2. 检查图像文件的标题字节.
    • 优点:快速,低内存使用率.
    • 缺点:可能脆弱; 需要为每种文件类型编程.
  3. 检查文件扩展名.
    • 优点:最快; 最简单的.
    • 缺点:不适用于所有情况; 最容易出错.

(我没有看到明确的"赢家",因为我可以想象每个人都适合的情况.对于我的应用程序的目的,文件类型检查不经常发生,方法1的性能问题不是问题.)

.net file-format file-type image

18
推荐指数
2
解决办法
4415
查看次数

如何配置SublimeLinter-contrib-rustc以找到"活塞"箱?

我正在用Piston构建一个Rust游戏,我正在尝试使用SublimeLinter Rust包.当我打开我的.rs游戏文件时,我得到了这个linter错误:

extern crate piston; // linter error: "can't find crate for 'piston'"
Run Code Online (Sandbox Code Playgroud)

如果我检查Sublime控制台,我可以看到linter找到了rustc:

SublimeLinter: rust activated: /usr/local/bin/rustc
Run Code Online (Sandbox Code Playgroud)

我没有在控制台中看到任何明显的错误消息.我把活塞列为我的Cargo.toml中的依赖项,我能够cargo run成功.

我是一个完整的Rust&SublimeLinter新手.

对于我先放入的导入,我得到类似的错误; 例如,如果我移动extern crate graphics;到文件的第一行,我得到错误"无法找到'图形'的箱子".

编辑:结果启用"使用 - 货物"设置解决了问题.我在项目根目录中添加了一个".sublimelinterrc"文件,其中包含以下内容:

{
  "linters": {
    "rust": {
      "use-crate-root": true,
      "use-cargo": true
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

rust sublimelinter sublimetext3

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

如何找到树上一组节点之间的最大距离?

我在(非二进制)树上有一组n个节点.我想找到任意两个节点之间的最大距离.(我将两个节点之间的距离定义为这些节点与其最低共同祖先之间的距离之和).

我可以很容易地计算只是每个节点之间的距离,彼此节点,获得最大的解决为O这个问题(N ^ 2),但我希望的东西,因为这更实在太慢*为我的应用场景.

(额外的信息:在我的应用场景,这些节点实际上是文件和树的目录结构.因此,树是很浅(深度<〜10),但它可能有300,000节点文件的集合可以.大约3200之间的任何地方.实际上,我正在试图弄清楚我的文件在每组中的分布范围.)*

编辑:也许我可以问一个等效的问题来提示更多的答案:考虑原始树的一个子集,它只包含我的集合中的节点和连接它们所需的节点.然后问题变成:如何在无向非周期图中找到最长的简单路径?

*编辑2:正如didierc指出的那样,我实际应该考虑的是文件夹集而不是文件.这使得我的设置更小,并且详尽的方法可能足够快.不过,看一个更快的解决方案是有益的,我很想知道是否有一个.

algorithm tree graph

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

为什么类型约束不是方法签名的一部分?

所以我读了Eric Lippert的'Constraints不是签名的一部分',现在我明白规范指定在重载解析后检查类型约束,但我仍然不清楚为什么必须如此.以下是Eric的例子:

static void Foo<T>(T t) where T : Reptile { }
static void Foo(Animal animal) { }
static void Main() 
{ 
    Foo(new Giraffe()); 
}
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为重载解析:Foo(new Giraffe())推断Foo<Giraffe>是最好的重载匹配,但是类型约束失败并抛出编译时错误.用埃里克的话说:

这里的原则是重载决策(和方法类型推断)找到参数列表和每个候选方法的形式参数列表之间的最佳匹配.也就是说,他们会查看候选方法的签名.

类型约束不是签名的一部分,但为什么不能呢?在某些情况下,考虑类型约束是签名的一部分是个坏主意吗?实施起来困难还是不可能?我并不是在提倡如果最佳选择的超载是出于无论什么原因无法调用的话,那么就会默默地回归到第二好的; 我讨厌那个.我只是想了解为什么不能使用类型约束来影响最佳过载的选择.

我想象在C#编译器内部,仅用于重载解析(它不会永久重写方法),如下所示:

static void Foo<T>(T t) where T : Reptile { }
Run Code Online (Sandbox Code Playgroud)

变成了:

static void Foo(Reptile  t) { }
Run Code Online (Sandbox Code Playgroud)

为什么不能将类型约束"拉入"形式参数列表?这怎么会以任何不好的方式改变签名?我觉得它只会加强签名.然后Foo<Reptile>永远不会被视为超载候选者.

编辑2:难怪我的问题太混乱了.我没有正确阅读Eric的博客,我引用了错误的例子.我在示例中编辑了我觉得更合适.我还将标题更改为更具体.这个问题似乎并不像我最初想象的那么简单,也许我错过了一些重要的概念.我不太确定这是stackoverflow材料,这个问题/讨论可能最好转移到其他地方.

c# generics type-constraints overload-resolution nested-generics

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

FMA(融合乘法 - 加法)指令总是产生与mul相同的结果然后添加指令吗?

我有这个程序集(AT&T语法):

mulsd   %xmm0, %xmm1
addsd   %xmm1, %xmm2
Run Code Online (Sandbox Code Playgroud)

我想用以下代替:

vfmadd231sd %xmm0, %xmm1, %xmm2
Run Code Online (Sandbox Code Playgroud)

这种转换是否会在所有涉及的寄存器和标志中保持等效状态?或者结果浮点数会有些不同吗?(如果它们不同,为什么会这样?)

(关于FMA说明:http://en.wikipedia.org/wiki/FMA_instruction_set)

floating-point x86 assembly fma

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

Asp.Net应用程序中的Mathematica .Net/Link

我正在使用Mathematica .Net/Link平台创建一个Web服务来格式化和计算数学问题.但是我无法让它工作.

我使用以下代码创建它:

_Log.IpDebug("Starting the Kernel Link");
if (string.IsNullOrEmpty(_MathLinkArguments))
   _InternelKernel = MathLinkFactory.CreateKernelLink();
else
   _InternelKernel = MathLinkFactory.CreateKernelLink(_MathLinkArguments);
_Log.IpDebug("Kernel Link Started");
_InternelKernel.WaitAndDiscardAnswer();
Run Code Online (Sandbox Code Playgroud)

价值_MathLinkArguments-linkmode launch -linkname \"C:\\Program Files\\Wolfram Research\\Mathematica\\7.0\\Math.exe\".

这段代码是从Application_Startglobal.asax.cs文件的方法调用的.

当它到达WaitAndDiscardAnswer()调用时它会给出服务器错误:

Error code: 11. Connected MathLink program has closed the link, but there might still be data underway. 
Run Code Online (Sandbox Code Playgroud)

注意:使用.NET/Link包(控制台应用程序和WinForms应用程序)提供的SampleCode可以正常工作.

编辑:我将Mathematica提供的控制台应用程序示例代码复制到一个asp.net页面,它在第一次加载时给了我同样的错误,然后在它给我的后续加载中:

Error code: 1. MathLink connection was lost.
Run Code Online (Sandbox Code Playgroud)

编辑2:我忘了提到当我在运行我的应用程序时打开procmon和任务管理器时,我可以告诉Math.exe启动但它会立即退出,这使得这些错误代码完全有意义...但不解释为什么那事发生了.

.net c# asp.net wolfram-mathematica

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

任何 PixelFormat 都可以与任何 ImageFormat 一起使用吗?

任何 PixelFormat 都可以与任何 ImageFormat 一起使用吗?

我正在使用 System.Drawing.Bitmap 进行一些图像处理。当我创建位图时,我被要求提供 PixelFormat;当我保存位图时,我被要求提供一个 ImageFormat。这里有任何无效的组合吗?


为了帮助回答,这里是 PixelFormats 和 ImageFormats 的列表:

像素格式(MSDN - System.Drawing.PixelFormat):

Gdi*
Alpha*
PAlpha*
Extended*
Canonical*
Undefined*
DontCare*
Max*
Format1bppIndexed
Format4bppIndexed
Format8bppIndexed
Format16bppGrayScale**
Format16bppRgb555
Format16bppRgb565
Format16bppArgb1555
Format24bppRgb
Format32bppRgb
Format32bppArgb
Format32bppPArgb
Format48bppRgb
Format64bppArgb
Format64bppPArgb
Run Code Online (Sandbox Code Playgroud)

* - 传递给 new Bitmap() 时导致 ArgumentException
** - 不适用于任何 ImageFormat

ImageFormats ( MSDN - System.Drawing.ImageFormat ):

Bmp
Emf
Exif
Gif
Icon
Jpeg
MemoryBmp
Png
Tiff
Wmf
Run Code Online (Sandbox Code Playgroud)

编辑 1:使用 PixelFormats 更新 PixelFormat 列表,在创建位图时会导致异常。

编辑 2:通过我自己的一些测试,似乎 PixelFormat“ …

.net system.drawing

5
推荐指数
0
解决办法
625
查看次数