小编Sco*_*ham的帖子

我用C#对象初始化器做错了什么?

当我使用C#中的新对象初始化器初始化对象时,我不能使用类中的一个属性来执行进一步的操作,我不知道为什么.

我的示例代码:

Person person = new Person { Name = "David", Age = "29" };
Run Code Online (Sandbox Code Playgroud)

在Person类中,x将等于0(默认值):

public Person()
{
  int x = Age; // x remains 0 - edit age should be Age. This was a typo
}
Run Code Online (Sandbox Code Playgroud)

然而,person.Age确实等于29.我确信这是正常的,但我想明白为什么.

c# object-initializers

7
推荐指数
3
解决办法
522
查看次数

如何从'call'ed例程中终止Windows批处理文件?

我有一个Windows批处理文件,其中有几个子例程,如下所示:

call :a
goto :eof

:a
call :b
goto :eof

:b
:: How do I directly exit here from here?
goto :eof
Run Code Online (Sandbox Code Playgroud)

我在Vista的cmd窗口中运行它.
如果我在批处理文件中的某处检测到错误,我希望它以非零错误级别退出.我可以在例程中编写任何内容:b将导致批处理文件像这样终止.

  • 我试过'退出',关闭整个cmd窗口.那不是我想要的.
  • 我试过'退出/ B 1'.这将返回上一个例程.要在每次"调用"之后使用此方案,我必须在每次"调用"之后仔细写入"if errorlevel 1 exit/B 1"以将错误传递回调用堆栈.我不想在每次通话后都写这条线.

这篇文章很有意思,但没有替代方案按照我想要的方式行事.http://www.computerhope.com/exithlp.htm

还有另外一种方法吗?

谢谢.

windows batch-file

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

使用WinForms设计器时,是否始终需要将DPI设置为96?

使用我当前的显示器,我更喜欢每英寸120像素的DPI设置(窗口暗示为默认值).但是,在设计表单后,它通常会在不使用每英寸120像素的系统上错误地布局.

我想知道,每当我使用设计师时,我是否有必要将显示设置设置为每英寸96像素?

此外,当其他开发人员具有不同的DPI时,存在一些问题.他们在设计器中打开一个表单并移动类似文本编辑控件的东西,然后突然发现它自动调整大小.然后,有一个控件与其他控件的尺寸不同,而且我们一团糟.

PS我已经阅读了相关帖子.他们都很有趣,但没有回答我的问题.

如何在.NET WinForms应用程序中控制字体DPI

C#WinForms禁用DPI缩放

WinForms不同的DPI布局

DPI无法正确缩放

Visual Studio和DPI问题

winforms

7
推荐指数
2
解决办法
2592
查看次数

在 C++17 中,是否可以使用带有初始值设定项的 if 语句来解压可选项?

我正在使用 std::optional 编写一些代码,并且想知道 C++17 的“带有初始化程序的 if 语句”是否能够帮助解压缩值?

std::optional<int> optionalInt = GetOptionalInt();
Run Code Online (Sandbox Code Playgroud)

我在这里编写函数 Unpack:

if( auto [value, has_value] = optionalInt.Unpack(); has_value )
{
    // Use value here.
}
Run Code Online (Sandbox Code Playgroud)

但是,我的问题是。C ++ 17“带有初始化程序的if语句”在这里有帮助吗?如果是这样,它将如何编码?

更新,这实际上主要是使用 optional 时的一个问题,这非常容易被误用,因为 optional 和 *optional 都返回 bool 并且当有人尝试访问该值并忘记 *.

c++ c++17 stdoptional

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

为什么这个enable_if函数模板不能专门用于VS2017?

以下使用VS2015编译,但在VS2017中失败并出现以下错误.代码是否在VS2017中修复了非标准的东西,还是VS2017应该编译它?

#include "stdafx.h"
#include <type_traits>

template <typename E>
constexpr auto ToUnderlying(E e)
{
    return static_cast<std::underlying_type_t<E>>(e);
}

template<typename T>
bool constexpr IsFlags(T) { return false; }

template<typename E>
std::enable_if_t<IsFlags(E{}), std::underlying_type_t<E>> operator | (E lhs, E rhs)
{
    return ToUnderlying(lhs) | ToUnderlying(rhs);
}

enum class PlantFlags { green = 1, edible = 2, aromatic = 4, frostTolerant = 8, thirsty = 16, growsInSand = 32 };

bool constexpr IsFlags(PlantFlags) { return true; }

int main()
{
    auto ored = PlantFlags::green | PlantFlags::frostTolerant; …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-2017

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

为什么 signtool.exe 在以管理员身份运行时只能找到证书?

我正在安装一台新的开发笔记本电脑,并安装了一个自行颁发的代码签名证书。我可以在我当前用户的个人证书下的 certmgr 中看到它。

当我尝试从 Visual Studio 2017 的开发人员命令提示符构建时,我得到:
error : SignTool Error: No certificates were found that met all the given criteria.

这在我的旧笔记本电脑上总是很好用。

我发现如果我在以管理员身份启动后从命令提示符运行相同的构建,signtool 会成功并且可以找到证书。

当我们安装新的笔记本电脑时,3/4 的同事发生了这种情况。一个人没问题,无需以管理员身份运行即可签名。在我们的旧笔记本电脑上,我们永远不必以管理员身份运行。

我试过用谷歌搜索找出可能是什么原因,因为我不知道以管理员身份运行与否应该对此产生任何影响。我还没有找到对这个问题的任何参考。

我们如何在不以管理员身份运行的情况下使用 signtool.exe?

当不以管理员身份运行时,它似乎在私钥过滤步骤中,我希望选择的证书被过滤掉:

**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.12
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************

C:\>signtool sign /v /debug /ph  /i "<issuedby>"  /fd sha256 /td sha256 "C:\TestSign.dll"

The following certificates were considered:
    Issued to: Scott Langham
    Issued by: <issuedby>
    Expires:   Sun Sep 25 09:54:55 2022
    SHA1 …
Run Code Online (Sandbox Code Playgroud)

windows code-signing certificate code-signing-certificate signtool

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

有没有办法让C#绑定工作静态?

这可能适用于其他地方,但在WinForms中,当我使用绑定时,我发现许多方法都希望将属性的名称绑定到.就像是:

class Person
{
    public String Name { get { ... } set { ... } }
    public int Age { get { ... } set { ... } }
}

class PersonView
{
    void Bind(Person p)
    {
        nameControl.Bind(p,"Name");
        ageControl.Bind(p,"Age");
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直遇到的一个大问题是"Name"和"Age"被指定为字符串.这意味着如果有人重命名Person的一个属性,编译器就无济于事.代码编译正常,但绑定将被破坏.

我错过了解决这个问题的标准方法吗?感觉我需要一些关键字,也许叫做stringof来匹配现有的typeof.你可以使用它:

ageControl.Bind(p,stringof(p.Age).Name);
Run Code Online (Sandbox Code Playgroud)

stringof可以返回一些具有获取完整路径,路径的一部分或字符串的属性的类,以便您可以自己解析它.

这样的事情已经可以吗?

c# language-features

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

MSB3422无法通过VC项目引擎对象模型检索VC项目信息.MSB3425

在尝试构建解决方案时,我从MSBuild收到以下错误:

C:\dev\MySln.sln : warning MSB3422: Failed to retrieve VC project information through the VC project engine object model. Unable to determine default tool for the specified file configuration.
C:\dev\MySln.sln : warning MSB3425: Could not resolve VC project reference "C:\dev\MyProj.vcproj".
Run Code Online (Sandbox Code Playgroud)

你有什么想法导致这个问题以及如何解决这个问题吗?我已经看过其他类似但不同的错误帖子,例如当MSB3422错误有不同的消息并显示"路径中的非法字符"时,但我还没有看到任何关于如何解决错误的有用信息我是到达"无法确定指定文件配置的默认工具"的位置.

谢谢.


我找到了这个,但它并没有真正帮助:

http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/b470f111-9321-4b43-8bd1-7fcf67c2d402

msbuild

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

为什么我的符号(pdb)不会从本地路径加载?

我刚刚构建了我的应用程序,它包含一些C++和C#代码,并将其安装在另一台机器上.当我连接远程调试器时,我可以调试C++代码,然后逐步调试它.但是,当我尝试调试C#代码时,似乎没有加载符号.我已经尝试在visual studio中调出模块窗格并浏览了正确的.pdb文件,但我只是得到一个消息框告诉我它不匹配.

我无法弄清楚为什么会这样.我从这里使用了chkmatch:http://www.debuginfo.com/tools/chkmatch.html - 报告我选择的.exe和.pdb匹配.

我已经擦除了我所有的来源,取出并重建了所有东西,所以我很确定我没有遇到一些旧的错误.pdbs.

我发现这个相关的问题符号文件MyFile.pdb与模块不匹配但是,更多的是做本机符号不匹配.我的原生符号匹配,它只是符号拒绝匹配的.net程序集.

我们非常欢迎任何有待检查的建议.

谢谢.

更新:我已设法立即加载符号!但是......解决方案是将符号文件复制到远程计算机并将它们放在与远程计算机上的.exe和dll相同的文件夹中.Visual Studio似乎拒绝从我的本地计算机加载它们.如果我右键单击模块窗口中的模块并选择"符号加载信息...",这将显示它尝试加载符号的路径,并且包含pdb文件在我的位置的正确本地路径机.我查看了pdbs的安全性和访问控制属性,并给予了所有人的所有访问权限.

这真的令人困惑,我相信在过去我已经能够加载符号了.我想不出任何我改变的东西会突然导致它停止工作.

为什么Visual Studio拒绝从本地计算机加载符号?

c# debugging symbols

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

C# MsTest 项目可以转换为 Microsoft.NET.Sdk 项目格式吗?

我有一个针对 net48 的 C# MsTest 项目。我已将其测试的项目更改为更新样式的 Microsoft.NET.Sdk csproj 格式,一切顺利。现在我也想转换单元测试项目。

我收到有关无法找到命名空间 Microsoft.VisualStudio.TestTools.UnitTesting 的错误:error CS0234: The type or namespace name 'VisualStudio' does not exist in the namespace 'Microsoft'

为了解决这个问题,我添加了对 csproj 的程序集引用:

  <ItemGroup>
    <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

但我收到错误消息,无法找到它。 warning MSB3245: Could not resolve this reference. Could not locate the assembly "Microsoft.VisualStudio.QualityTools.UnitTestFramework". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.

当使用旧的 csproj 格式时,发现这是可以的。

我怎样才能找到这个程序集引用,或者完成这项工作的首选方法是什么?

c# unit-testing visual-studio

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