有两种方法可以增加调试信息的有用性,而不是{MyNamespace.MyProject.MyClass}
在调试器中查看.
这些是使用[DebuggerDisplayAttribute][1]
和ToString()
方法.
using System.Diagnostics;
...
[DebuggerDisplay("Name = {Name}")]
public class Person
{
public string Name;
}
Run Code Online (Sandbox Code Playgroud)
要么
public class Person
{
public string Name;
public override string ToString()
{
return string.Format("Name = {0}", Name);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有理由更喜欢一个到另一个?有什么理由不这两个都做?这纯粹是个人偏好吗?
可能在我构建解决方案的25%到50%之间,我看到了这一点:
" 您请求的操作花费的时间比预期的要长.完成操作后,此对话框将关闭. "
我以我无法描述的方式讨厌这个窗口.它永远不会解决,取消按钮永远不会启用,唯一的解决方法是杀死devenv进程并再次加载我的整个解决方案,完全知道我没有修复任何东西,我同样有责任看到当我尝试构建时也一样.
我的解决方案总共约有60个项目,主要是C#类库,每个项目都包含Web应用程序,Web服务和控制台应用程序.但是,即使在卸载了大部分(50个)项目的情况下构建一个代码库时,问题仍然存在.
我的问题是输出窗口没有告诉我它冻结的任何地方,我不知道如何确定这种锁定的原因.如果我猜测,我会认为这是文件系统中的死锁或其他什么,但我不知道如何证明这一点 - 更不用说如何防止它.
我可以做些什么来诊断并消除我的解决方案,以便我再也看不到它?一般来说,如何诊断构建期间出现的问题?
阅读MSDN参考后,我仍然对何时使用KnownType属性有疑问.我知道该属性将类型信息传递给序列化程序,但何时需要?当被序列化的类具有基类类型的引用时,是否适合,并且有可以设置为这些引用的上传衍生类?
而且,过度使用属性有什么缺点吗?例如,在前面的示例中,如果序列化类使用KnownType(baseClass)标记,即使存在对该类型的显式引用?
我运行Visual Studio 2012,我是SSIS的新手.我尝试安装SSDT-BI(2013年6月版)以研究SSIS,但我无法使用我的默认实例完成安装,因为架构不匹配 - 我的服务器是x64而安装程序是x86.似乎没有安装程序的x64版本.
SSDT-BI不支持x64数据库吗?
sql-server ssis visual-studio-2012 ssdt-bi sql-server-data-tools
通常,如果要将switch参数的规范推迟到某个变量,可以将表达式传递给switch参数,如WhatIf参数所示.
test.ps1
param ( [string] $source, [string] $dest, [switch] $test )
Copy-Item -Path $source -Destination $dest -WhatIf:$test
Run Code Online (Sandbox Code Playgroud)
这使您在使用交换机时具有很大的灵活性.但是,当您使用cmd.exe或其他东西调用powershell时,最终会出现以下情况:
D:\test>powershell -file test.ps1 -source test.ps1 -dest test.copy.ps1 -test:$true
D:\test\test.ps1 : Cannot process argument transformation on
parameter 'test'. Cannot convert value "System.String" to type "System.Manageme
nt.Automation.SwitchParameter", parameters of this type only accept booleans or
numbers, use $true, $false, 1 or 0 instead.
At line:0 char:1
+ <<<<
+ CategoryInfo : InvalidData: (:) [test.ps1], ParentContainsError
RecordException
+ FullyQualifiedErrorId : ParameterArgumentTransformationError,test.ps1
Run Code Online (Sandbox Code Playgroud)
但是,通过时会出现相同的结果-test:true
,并且-test:1 …
我在生产代码中看到的参数越多,我遇到的误用就越多,它给我带来的痛苦就越多.我讨厌这个关键字,因为从框架构建的角度来看,它似乎很愚蠢.什么时候向代表用户传达可能会更改对象引用/值的概念?
相比之下,我喜欢关键词,在没有使用任何关键词的情况下我更喜欢,因为在使用它们时给予了保证.另一方面,Ref不能保证,除非你在被传入之前被迫初始化参数,即使它没有任何改变.
我不是一个圣人开发者; 我确信它有实际适用的用途.我只想知道它们是什么.
可以使用join语句删除以限定要删除的集合,例如:
DELETE J
FROM Users U
inner join LinkingTable J on U.id = J.U_id
inner join Groups G on J.G_id = G.id
WHERE G.Name = 'Whatever'
and U.Name not in ('Exclude list')
Run Code Online (Sandbox Code Playgroud)
但是我有兴趣删除连接标准的两个方面 - LinkingTable
记录和它所依赖的用户记录.我无法启用级联,因为我的解决方案首先是实体框架代码,而双向关系是多个级联路径.
理想情况下,我喜欢这样的东西:
DELETE J, U
FROM Users U
inner join LinkingTable J on U.id = J.U_id
...
Run Code Online (Sandbox Code Playgroud)
从句法上来说这没有用,但我很好奇这样的事情是否可行?
我已经看到了几个与此问题类似的线索,但他们都没有真正回答我想问的问题.
对于初学者来说,不幸的是我正在使用现有的API代码,所以很遗憾,虽然可能有更好的方法来做我所要求的事情,但是由于向后兼容性不同,我已经被锁定了. -negotiable.
我有一个响应类,当前包含一个错误代码和字符串描述的枚举.错误代码定义了一组相当不错且完整的响应,这些响应在语义上与使用它们的操作非常相似.
不幸的是,我现在必须为一组类似的API对象添加不同的工作流程,这将需要一个字符串描述,这很好,但也是一个包含一组完全不相关的错误代码的枚举错误代码.错误代码(以及对象模型的其他方面)将在许多相同的类中使用,因此最好让接口运行以便我可以通过相同的框架运行对象.
这里的目的是签订一份合同,上面写着"我有一个错误代码,以及该错误代码的描述".
但是,据我所知,没有办法将项目添加到界面,如
public interface IError
{
enum ErrorCode;
string Description;
}
Run Code Online (Sandbox Code Playgroud)
也没有办法表达
public interface IError<T> where T: enum
{
T ErrorCode;
string Description;
}
Run Code Online (Sandbox Code Playgroud)
以前每个人都遇到这样的事情吗?
我是MSBuild的新手,我在Wpf项目文件上做了一些自定义,我在VS2010和TFS2010中都在构建.我已按如下方式自定义输出路径:
<OutputPath Condition=" '$(TeamBuildOutDir)' == '' ">$(SolutionDir)build\binaries\$(ProjectName)\$(Configuration)\$(Platform)</OutputPath>
<OutputPath Condition=" '$(TeamBuildOutDir)' != '' ">$(TeamBuildOutDir)binaries\$(ProjectName)\$(Configuration)\$(Platform)</OutputPath>
Run Code Online (Sandbox Code Playgroud)
这允许我在桌面上构建时构建到集中式二进制文件目录,并允许TFS在CI构建运行时查找二进制文件.
但是,似乎在这两种情况下,$(ProjectDir)属性都在构建时评估'',这会产生奇怪的结果.进行一些调试时,看起来好像$(ProjectName)是在BeforeBuild执行时设置的,但是我的OutputPath属性在该点之前对其进行了评估.
<ProjectNameUsedTooEarly Condition=" '$(ProjectName)' == '' ">true</ProjectNameUsedTooEarly>
Run Code Online (Sandbox Code Playgroud)
前面的属性与我的OutputPath属性位于同一属性组中.在BeforeBuild目标中,$(ProjectNameUsedTooEarly)的计算结果为true,但$(ProjectName)正常评估项目名称.
我可以做些什么来确保$(ProjectName)在我使用它时得到一个值?
编辑:我刚刚使用Attrice的MSBuild Sidekick来调试我的构建文件,并且在第一个可用于断点的目标(_CheckForInvalidConfigurationAndPlatform)中,似乎已经设置了所有属性.ProjectName已正确设置,但我的OutputPath属性已使用ProjectName的空值设置.
对于像-WhatIf这样的东西,我们有[CmdletBinding]属性给我们的$ PSCmdlet.ShouldProcess().是否有其他此类工具或实践来实现常见的命令行参数,如-Verbose,-Debug,-PassThru等?
debugging powershell passthru command-line-arguments verbose
c# ×4
debugging ×2
interface ×2
msbuild ×2
parameters ×2
powershell ×2
sql-server ×2
.net ×1
build ×1
cmd ×1
deadlock ×1
delete-row ×1
enums ×1
generics ×1
known-types ×1
passthru ×1
sql ×1
ssdt-bi ×1
ssis ×1
tfsbuild ×1
tostring ×1
verbose ×1
wcf ×1