小编Jon*_*Yee的帖子

在Visual Studio中构建时,有条件地使用32/64位引用

我有一个以32/64位构建的项目,并具有相应的32/64位依赖项.我希望能够切换配置并使用正确的引用,但我不知道如何告诉Visual Studio使用适当的体系结构依赖.

也许我正在以错误的方式解决这个问题,但我希望能够在配置下拉列表中切换x86和x64,并使引用的DLL成为正确的位数.

.net 64-bit 32bit-64bit visual-studio

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

调用Assembly.Load(byte())时会触发AssemblyResolve事件

所以我有一个WPF项目正在拉动我的工作中另一个项目使用的dll.这是依赖乱七八糟的,我一直在使用的技术在这里:http://www.digitallycreated.net/Blog/61/combining-multiple-assemblies-into-a-single-exe-for-a-wpf-application将依赖项嵌入到单个可执行文件中.

现在,当我在其中一个依赖项中调用特定方法时,我点击了AssemblyResolve事件.我的OnResolveAssembly事件运行,它将程序集作为嵌入式资源(很酷!),然后"返回Assembly.Load(assembyRawBytes)".如果我此时点击F11(在OnResolveAssembly的开头有一个断点),我会再次调用同一个事件.这也是同一个程序集(args.Name是相同的).

如果我让这次运行我遇到堆栈溢出,因为我似乎永远不会逃避这个递归事件调用.

除了FileNotFoundException或BadImageFormatException之外,MSDN文档并没有真正说明Assembly.Load何时会失败.

在我调用Assembly.Load之前,我已经尝试解开OnResolveAssembly,但随后我的应用程序死了一个神秘的死亡,即使在VS下它也只是死了.

我可能在这里违反了几条规则,但是欢迎从哪里开始寻找问题.

我将开始在有问题的DLL中探讨是否有关于它有什么问题的提示(也许它是混合程序集?).

这是我的OnResolveAssembly处理程序:

private static Assembly OnResolveAssembly(object sender, ResolveEventArgs args)
{
    Assembly executingAssembly = Assembly.GetExecutingAssembly();
    AssemblyName assemblyName = new AssemblyName(args.Name);

    string path = assemblyName.Name + ".dll";

    if (assemblyName.CultureInfo.Equals(System.Globalization.CultureInfo.InvariantCulture) == false)
    {
        path = String.Format(@"{0}\{1}", assemblyName.CultureInfo, path);
    }
    using (Stream stream = executingAssembly.GetManifestResourceStream(path))
    {
        if (stream == null)
            return null;

        byte[] assemblyRawBytes = new byte[stream.Length];
        stream.Read(assemblyRawBytes, 0, assemblyRawBytes.Length);
        assemblyDictionary.Add(assemblyName.Name, Assembly.Load(assemblyRawBytes));
        return assemblyDictionary[assemblyName.Name];
    }
}
Run Code Online (Sandbox Code Playgroud)

目前,我通过遍历所有资源并尝试使用Assembly.Load并将它们存储在字典中进行检索(在OnResolveAssembly事件期间)来解决它:

[STAThread]
public static void Main() …
Run Code Online (Sandbox Code Playgroud)

.net c#

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

等待在C#中创建文件

是否存在等待在c#中创建文件的内置方法?如何等待文件完全写入?

我通过在文件上反复尝试File.OpenRead()直到它成功(并且在超时时失败)来烘焙自己,但是在文件上旋转似乎不是正确的事情.我猜测.NET中有一个烘焙方法可以做到这一点,但我找不到它.

c# file-io

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

在emacs中打开xml文件时运行sgml-pretty-print?

我目前可以使用的SGML漂亮地打印到相当打印在Emacs一个XML文件,但它是一个手动过程:

  1. M- <
  2. C-空间
  3. M->
  4. Mx sgml-pretty-print

我希望这是自动发生的(或者至少有一些选择).我是emacs/elisp的新手,并且不明白如何:

  1. emacs知道打开文件时要运行的代码(这是从files.el开始的吗?)
  2. 如果您想用自己的代码覆盖该代码,该怎么做

emacs elisp

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

va_arg返回错误的参数

使用以下代码,va_arg将通过vProcessType返回第二次和第三次传递的垃圾.

// va_list_test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <tchar.h>
#include <cstdarg>
#include <windows.h>

void processList(LPTSTR str, ...);
void vProcessList(LPTSTR str, va_list args);
void vProcessType(va_list args, int type);

int _tmain(int argc, _TCHAR* argv[])
{
    LPTSTR a = TEXT("foobar");
    int b = 1234;
    LPTSTR c = TEXT("hello world");
    processList(TEXT("foobar"), a, b, c);
    return 0;
}

void processList(LPTSTR str, ...)
{
    va_list args;
    va_start(args, str);
    vProcessList(str, args);
    va_end(args);
}
void vProcessList(LPTSTR str, va_list args)
{ …
Run Code Online (Sandbox Code Playgroud)

c c++ variadic-functions

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

在INSERT语句中使用OPENROWSET,同时指定另一列的值?

我正在使用OPENROWSET(BULK ...)将文件内容插入到我的表中.问题是我还需要在同一个INSERT语句中指定另一列的值.

我有这样的事情:

INSERT INTO MyTable
SELECT *
FROM OPENROWSET(BULK 'c:\foo.bin', SINGLE_BLOB)
Run Code Online (Sandbox Code Playgroud)

我确定有一种方法可以在这里指定不同列的值,但我不知道如何.

sql insert openrowset

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