我还在学习powershell,到目前为止,尽管进行了一些搜索,但我还没有在这个网站上找到答案.由于Powershell是在.NET框架之上构建的,我可以使用Powershell编写自己的自定义类吗?
我不是在谈论实例化.NET类......那部分很简单.我想使用PowerShell脚本编写自己的自定义类.可能?到目前为止,我的研究让我说这是不可能的.但我想与大师的第一个确认......
鉴于此powershell代码:
$drivers = New-Object 'System.Collections.Generic.Dictionary[String,String]'
$drivers.Add("nitrous","vx")
$drivers.Add("directx","vd")
$drivers.Add("openGL","vo")
Run Code Online (Sandbox Code Playgroud)
是否可以直接初始化此字典而无需调用Add方法.像.NET一样允许你这样做吗?
像这样的东西?
$foo = New-Object 'System.Collections.Generic.Dictionary[String,String]'{{"a","Alley"},{"b" "bat"}}
Run Code Online (Sandbox Code Playgroud)
[不确定这会涉及什么类型的语法]
我对powershell很新,我只是没有得到如何修改父作用域中的变量:
$val = 0
function foo()
{
$val = 10
}
foo
write "The number is: $val"
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我得到:
The number is: 0
Run Code Online (Sandbox Code Playgroud)
我希望它是10.但是PowerShell正在创建一个隐藏父范围内的变量的新变量.
我试过这些,没有成功(根据文档):
$script:$val = 10
$global:$val = 10
$script:$val = 10
Run Code Online (Sandbox Code Playgroud)
但这些甚至都没有'编译'可以这么说.我错过了什么?
我有一个构建目标,我正在尝试在MSBuild中执行.目标有一些输入和输出我已经放在那里以加快中间构建的时间.输入文件总是存在(头文件),另一方面,输出并不总是存在(XML文件).
可能跳过任务的中间构建是非常理想的,因为它在性能方面非常昂贵.
无论如何,如果输出已经存在,输入和输出工作得很好.在这种情况下,MSBuild发出一条非常有用的消息,说明目标被跳过,因为所有文件都是最新的.
当输出目录和文件不存在(第一次运行此任务)时,MSBuild失败并出现以下消息:
跳过目标[targetname],因为它没有输出.
添加详细的详细程度告诉我原因是因为@(OutputXML)项是空的.好的,现在呢?因此,似乎并不是MSBuild中的中间构建的整个概念非常强大.
我的问题是,如何在没有输出的情况下获得中间构建的好处并仍然执行此目标?(我希望我不必编写自己的任务扩展)
这是我的构建脚本的相关部分:
<ItemGroup>
<Headers Include="..\**\*.h" />
<OutputXML Include="$(OutputDir)\*.xml" />
</ItemGroup>
<Target Name="Doxygen"
Inputs="@(Headers)"
Outputs="@(OutputXML)" >
<Exec ... />
</Target>
Run Code Online (Sandbox Code Playgroud)
注意:我一直在google,msdn,这个网站试图找到答案,到目前为止一直没有成功.虽然我发现了一般有关MSBuild的非常有用的信息.
不幸的是,我今天做了一些代码考古(虽然重构了一些旧的危险代码),并发现了一个像这样的小化石:
# line 7 "foo.y"
Run Code Online (Sandbox Code Playgroud)
我完全惊讶地发现那里有如此古老的宝藏.我在一个C编程网站上读到了它.然而,它没有解释为什么有人想要使用它.因此,我不得不猜测程序员纯粹是为了向编译器说谎的纯粹快乐.
注意:(请注意,化石实际上是在cpp文件的第3行)(哦,该文件确实指向与该文件几乎相同的.y文件.
有谁知道为什么需要这样的指令?或者它可以用于什么?
我有一个庞大的应用程序(数百万LOC,和数万个文件),我正在尝试使用debug crt来检测内存泄漏.我正试图像这样宏观化:
#define _CRTDBG_MAP_ALLOC
#include <crtdbg.h>
#ifndef NEW_DEBUG
#define NEW_DEBUG new(_NORMAL_BLOCK, __FILE__, __LINE__)
#define new NEW_DEBUG
#endif
Run Code Online (Sandbox Code Playgroud)
现在,我的应用程序是如此之大,所以对我而言,理想情况下,我会把它放在一个头文件中,特别是包含在成千上万的CPP文件中.不是一个有趣的任务.所以我试图将它放在SDK中的公共头文件中,该文件将包含在每个转换单元中.
我遇到的问题是它似乎与一些STL头文件冲突,并且编译器在使用placement new时发出错误.我可以通过使用pragma和禁用新宏在我自己的代码中更改它.那不是问题.这是使用贴牌新的STL头文件,我无法改变.
通过重新排列cpp文件中的include指令,我找到了解决方法.例如:
// doesn't compile
#include "new_redirect.h"
#include <map> // for instance
// does compile
#include <map> // for instance
#include "new_redirect.h"
Run Code Online (Sandbox Code Playgroud)
但这是一个困难的解决办法,因为我必须再修改数千个文件,并确保他们的STL标题包含在其他任何内容之前.具有讽刺意味的是,我创建了一个hello world应用程序来专门测试这个问题:我的hello-world应用程序编译得很好.但是如果没有这种解决办法,我的庞大应用程序就不会.
所以我的问题是:
谢谢
很抱歉打扰这个问题的人,但我已经研究了几个小时了,还没有决议:
我正在将一个相当庞大的应用程序移植到Visual Studio 2010中的10.0 CRT(编译器).该应用程序是使用/ clr管理的C++/CLI.大多数代码都是本机代码(95%),其中包含一些托管部分.
所以我的工作是将.vcxproj中的开关定位到较新的10.0 CRT(即编译器).我们以前使用的是v90,或者使用VS 2008 SP1附带的VC编译器.
好的,这么重大变化?实际上看起来像一堆.我修复了一些处理集合的迭代器问题,这一切都非常简单.
但这些链接器错误正在扼杀我.任何帮助,将不胜感激:
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0001c0).
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2022: metadata operation failed (80131195) : Custom attributes are not consistent: (0x0c0001c5).
...
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2034: metadata inconsistent with COFF symbol table: symbol '??0?$allocator@D@std@@$$FQAE@ABV01@@Z' (06000141) has inconsistent metadata with (0A000F75) in identity.obj
1>MSVCMRTD.lib(locale0_implib.obj) : error LNK2034: metadata inconsistent with COFF symbol table: symbol '??0?$allocator@D@std@@$$FQAE@ABV01@@Z' (06000141) has inconsistent metadata with …Run Code Online (Sandbox Code Playgroud) 摘要:
使用visual studio和托管C++和C#项目,项目构建错误
描述:
我有一个庞大的(100多个项目)解决方案文件,正在以错误的顺序构建一些项目.解决方案文件包含以下类型的项目:
该解决方案包含不同类型项目之间的所有适当依赖关系.好吧,所以当我从命令行(使用MSBuild)构建时,存在问题.托管项目(包括C++和C#)的依赖关系以错误的顺序构建.例如,项目将无法构建,因为缺少托管依赖项.例如,托管C++文件将具有失败的using声明:
#using <foo.dll>
Run Code Online (Sandbox Code Playgroud)
因为foo.dll还不存在.
这意味着之前应该构建foo.dll,但事实并非如此.就像我之前提到的,依赖关系在解决方案文件中正确设置.例如,如果foo依赖于baz,我在解决方案文件中有这个...
Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "Foo", "...\Foo.vcxproj", "{5A42640E-9E0A-442B-8A40-AA91AD5444AC}"
ProjectSection(ProjectDependencies) = postProject
...
{2CE32AE0-B129-40BA-B06E-A628FA149AB3} = {2CE32AE0-B129-40BA-B06E-A628FA149AB3}
EndProjectSection
EndProject
...
Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "baz", "...\baz.csproj", "{2CE32AE0-B129-40BA-B06E-A628FA149AB3}"
ProjectSection(ProjectDependencies) = postProject
...
EndProjectSection
EndProject
Run Code Online (Sandbox Code Playgroud)
因此,解决方案文件正确具有依赖性.但是Foo.vcxproj项目中的依赖性仅由#using指令表示.我在视觉工作室博客上看到,在msbuild中订购项目时存在一个已知的错误. http://blogs.msdn.com/b/visualstudio/archive/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe.aspx
他们的工作是添加一个调用我的项目的项目,如下所示:
<ProjectReference Include="... foo.csproj">
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
Run Code Online (Sandbox Code Playgroud)
无论如何,我的问题是:我是否只需要为我的托管C++项目执行此操作?或者我是否为托管C++和C#项目执行此操作?(我相信我不需要为C#项目执行此操作,因为它们的依赖关系是明确的)
注意:我已经尝试将它放在我的构建中的所有项目中,并且它没有那么热,因为我在本机项目中遇到了很多奇怪的构建错误...
感谢您对此的任何回应.
我正在研究在我工作的(C/C++)项目中更改数百个文件的文件名.问题是我们的软件有成千上万的文件,包括(即#include)这些数百个将被改变的文件.这看起来像是一场维护噩梦.如果我这样做,我将被困在Ultra-Edit中数周,手动滚动数百个正则表达式:
^\#include.*["<\\/]stupid_name.*$
Run Code Online (Sandbox Code Playgroud)
同
#include <dir/new_name.h>
Run Code Online (Sandbox Code Playgroud)
这种苦差事要比用勺子在南极的沉没潜艇中剥掉数百个土豆更糟糕.我认为将输入和输出放入如下表格中是理想的:
stupid_name.h <-> <dir/new_name.h>
stupid_nameb.h <-> <dir/new_nameb.h>
stupid_namec.h <-> <dir/new_namec.h>
Run Code Online (Sandbox Code Playgroud)
并将其提供给正则表达式引擎/工具/ app /等...
我的终极问题:是否有工具可以做到这一点?
奖金问题:它是多线程的吗?
我在这个网站上查看了很多搜索和替换主题,并找到了许多标准查询,询问了以下问题的变体:
标准问题:替换N个文件中的一个术语.
而不是:
我的问题:替换N个文件中的N个术语.
提前感谢您的回复.
我有一个类的描述符,它的__set__方法不会被调用.我一直在寻找这个问题几个小时并且没有答案.但是我在下面注意到的是,当我将12分配给MyTest.X时,它会擦除X的属性描述符,并将其替换为值12.因此,将调用Get函数的print语句.非常好.
但是__set__函数的print语句根本没有被调用.我错过了什么吗?
class _static_property(object):
''' Descriptor class used for declaring computed properties that don't require a class instance. '''
def __init__(self, getter, setter):
self.getter = getter
self.setter = setter
def __get__(self, instance, owner):
print "In the Get function"
return self.getter.__get__(owner)()
def __set__(self, instance, value):
print "In setter function"
self.setter.__get__()(value)
class MyTest(object):
_x = 42
@staticmethod
def getX():
return MyTest._x
@staticmethod
def setX(v):
MyTest._x = v
X = _static_property(getX, setX)
print MyTest.__dict__
print MyTest.X
MyTest.X = 12 …Run Code Online (Sandbox Code Playgroud) powershell ×3
msbuild ×2
windows ×2
c ×1
c++ ×1
crtdbg.h ×1
dependencies ×1
dictionary ×1
memory-leaks ×1
python ×1
regex ×1
replace ×1
stl ×1
winapi ×1