我有一个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) 我想创建一个包含相同结构列表的结构,如下所示:
#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::list用std::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) #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)
但它没有编译.任何想法怎么做?
我在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) 以下代码在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)