小编Shi*_*C G的帖子

无法在.net 3.5项目中使用Windows脚本宿主对象模型

我有一个C#控制台应用程序(.Net版本3.5),代码如下

static void Main(string[] args)
{
    IWshRuntimeLibrary.WshNetwork aNetworkInstance = new IWshRuntimeLibrary.WshNetwork();
}
Run Code Online (Sandbox Code Playgroud)

当我运行该程序时,它会抛出以下错误.

Microsoft.VisualStudio.HostingProcess.Utilities.dll中发生未处理的类型'System.BadImageFormatException'异常

附加信息:无法加载文件或程序集'Interop.IWshRuntimeLibrary,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一.此程序集由比当前加载的运行时更新的运行时构建,无法加载.

我发现生成的互操作文件Interop.IWshRuntimeLibrary.dll是指mscorelib的4.0.0.0版本.

.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}
Run Code Online (Sandbox Code Playgroud)

如果我将项目的.net版本更改为4,那么它工作正常.知道为什么Interop.IWshRuntimeLibrary.dll总是引用mscorlib的版本4,即使我在项目中选择.net 3.5也是如此?

PS:同一程序正在其他系统中运行.问题只出现在一个系统中.

编辑:以下是我所做的步骤.

创建C#控制台应用程序(.Net版本3.5).添加引用到Windows Scribt主机对象模型

在Main()中添加以下行

static void Main(string[] args)
{
    IWshRuntimeLibrary.WshNetwork aNetworkInstance = new IWshRuntimeLibrary.WshNetwork();
}
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序时,它抛出以下异常.

mscorlib.dll中发生了未处理的"System.BadImageFormatException"类型异常

附加信息:无法加载文件或程序集'Interop.IWshRuntimeLibrary,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一.此程序集由比当前加载的运行时更新的运行时构建,无法加载.

我能够在其他机器上构建和运行该项目.如果我复制在另一台机器上生成的Interop.IWshRuntimeLibrary.dll,那么程序也在我的机器上运行.但我无法使用我的机器中生成的Interop.IWshRuntimeLibrary.dll运行该程序.

我知道这是一个奇怪的问题.可能是我必须按照Hans Passant的建议重新格式化我的硬盘:(

编辑:详细构建的输出

1>  C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\TlbImp.exe …
Run Code Online (Sandbox Code Playgroud)

.net c#

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

如何创建一个包含自身列表的结构?

我想创建一个包含相同结构列表的结构,如下所示:

#include <list>
struct Url
{
    CString strUrl;
    std::list<Url> children;
};

int main()
{
    Url u1, u2;
    u1.children.push_back(u2);
}
Run Code Online (Sandbox Code Playgroud)

此代码未编译.但当我std::liststd::vector它替换它工作正常.我该如何使用std::list

输出窗口包含以下错误.

c:\program files\microsoft visual studio\vc98\include\list(29) : error C2079: '_Value' uses undefined struct 'Url'
        E:\test\Test.cpp(23) : see reference to class template instantiation 'std::list<struct Url,class std::allocator<struct Url> >' being compiled
c:\program files\microsoft visual studio\vc98\include\functional(185) : error C2079: 'value' uses undefined struct 'Url'
        c:\program files\microsoft visual studio\vc98\include\list(285) : see reference to class template instantiation 'std::binder2nd<struct std::not_equal_to<struct Url> …
Run Code Online (Sandbox Code Playgroud)

c++ stl visual-c++-6

6
推荐指数
2
解决办法
2601
查看次数

如何在类声明之外声明模板函数

#include <iterator>
#include <map> 
#include <vector>

template <class T1, class T2>
class A
{
public:

    typedef typename std::vector<std::pair<T1,T2> >::iterator iterator;

    std::pair<iterator, bool > foo()
    {
        iterator aIter;
        return std::pair<std::vector<std::pair<T1,T2> >::iterator, bool >(aIter ,false);
    }
};
Run Code Online (Sandbox Code Playgroud)

上面的代码对我来说很好.但是我想在类声明之外移动函数的定义.我试过这个.

template <class T1, class T2>
class A
{
public:

    typedef typename std::vector<std::pair<T1,T2> >::iterator iterator;

    std::pair<iterator, bool > foo();
};

template <class T1, class T2>
std::pair<std::vector<std::pair<T1,T2> >::iterator, bool > A<T1, T2>::foo()
{
    iterator aIter;
    return std::pair<std::vector<std::pair<T1,T2> >::iterator, bool >(aIter ,false);
}
Run Code Online (Sandbox Code Playgroud)

但它没有编译.任何想法怎么做?

c++ templates visual-studio-2008

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

如何在VC6和VC9中进行此模板类编译

我在VC6中有一个很好的模板类编译.但它没有在VC9中编译.为此,我在一种类型的前面添加了"typename"关键字.在此之后,它在vc9中编译,但在VC6中不编译.如何使用两个编译器进行编译.

#include <map> 
#include <vector>

template <class T1, class T2>
class A
{
public:
    std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in);
};

template <class T1, class T2>
std::pair< std::vector<std::pair<T1,T2> >::iterator, bool> A<T1,T2>::insert(const std::pair<T1 ,T2>& value_in)
{
    std::pair< std::vector<std::pair<T1,T2> >::iterator, bool> b;
    return b;
}

void main()
{
    A<int, int> a;
    a.insert(std::pair<int, int>(0, 0));
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在VC6中编译.但不是在VC9中.以下代码适用于VC9,而不适用于VC6.

#include <map> 
#include <vector>

template <class T1, class T2>
class A
{
public:
    std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > insert(const std::pair<T1 ,T2> &value_in);
}; …
Run Code Online (Sandbox Code Playgroud)

c++ templates visual-studio-2008

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

c ++编译错误

以下代码在visual studio 2009中给出了编译错误.

#include <iterator>
#include <vector>

template <class T1, class T2 >
class A
{
public:

    typename std::vector<std::pair<T1,T2> >::iterator iterator;
    std::pair<iterator, bool > foo(const std::pair<T1 ,T2> &value_in);
};
Run Code Online (Sandbox Code Playgroud)

任何人都可以对它有所了解吗?这是错误.

error C2327: 'A<T1,T2>::iterator' : is not a type name, static, or enumerator
Run Code Online (Sandbox Code Playgroud)

c++ templates visual-studio

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