小编kkm*_*kkm的帖子

了解csproj程序集引用

我正在使用VS2010,我试图通过文件引用从本地硬盘添加一些程序集到我的C#项目.窥视csproj文件,我发现有时文件引用显示为

<Reference Include="name">
Run Code Online (Sandbox Code Playgroud)

但有时它看起来像

<Reference Include="name, Version=xxx, Culture=neutral, 
                                          processorArchitecture=MSIL">
Run Code Online (Sandbox Code Playgroud)

什么可能导致差异?


受到k3b答案的启发,我做了另一个测试.我创建了一个新的类库项目.

  1. 添加文件引用.的初始值特定版本属性面板是.该csproj文件看起来像

    <Reference Include="Name">
      <HintPath>...</HintPath>
    </Reference>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 更改特定版本属性窗格.VS在Include属性中添加版本.

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
    </Reference>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 更改特定版本属性窗格中一次.VS添加了一个子元素SpecificVersion.

    <Reference Include="Name, Version=...">
      <HintPath>...</HintPath>
      <SpecificVersion>False</SpecificVersion>
    </Reference>
    
    Run Code Online (Sandbox Code Playgroud)

所以似乎规则是:

  • 版本存在于包括属性,并且没有SpecificVersion子元素,该文件组件被配置为特定版本
  • SpecificVersion子元素只与价值附加.

有一点我还是不明白:

  • 对于我的新测试项目,如果我删除文件引用并再次添加它,它将返回到第1点的格式,这是默认值.
  • 对于我现有的项目,如果我删除文件引用并再次添加它,我会在第3点找回格式.虽然这也意味着没有使用特定版本,但我想知道为什么它不会回到第1点的格式.

c# reference csproj visual-studio-2010 .net-assembly

63
推荐指数
1
解决办法
4万
查看次数

如何从Windows Vault凭据管理器存储和检索凭据?

我想在Windows PC上安全地存储明文密码.我目前正在使用DPAPI CryptProtectData对其进行加密,然后将加密的blob存储在用户本地AppData中的文件中.

在Windows 7中,有Windows Vault,凭据管理器(控制面板\用户帐户和家庭安全\凭证管理器),用于存储各种登录类型的登录数据,包括"通用凭据".从表面上看,这似乎是程序存储凭据的正确位置.但是,我无法找到任何API.我在MSDN中读取了身份验证功能参考,但坦率地说它迷失了.

是否存在用于存储和检索程序凭据的Windows Vault API,如果可以,我在哪里可以找到文档?

security authentication winapi credentials dpapi

32
推荐指数
3
解决办法
4万
查看次数

dict_items对象没有属性'sort'Replace Min

首先,我是Python新手.我正在使用PTVS http://pytools.codeplex.com/.接下来我安装了reportlab.然后我在https://github.com/nakagami/reportlab/blob/master/demos/colors/colortest.py#L68上运行一个示例演示但是在线,

all_colors = reportlab.lib.colors.getAllNamedColors().items()
all_colors.sort() # alpha order by name
Run Code Online (Sandbox Code Playgroud)

我收到了错误, dict_items object has no attribute sort

python reportlab ptvs

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

转换为表达体似乎不起作用?

我有以下代码:

public bool IsUser
{
    get { return false; }
}
Run Code Online (Sandbox Code Playgroud)

现在Resharper建议我写它:

public bool UseBands => false;
Run Code Online (Sandbox Code Playgroud)

但是这不能编译,我的编译器抱怨我应该添加一个";"?

更新

我在Visual Studio 2013 Update 4上使用Resharper 9时遇到过这个问题.Resharper似乎在项目属性中查找应该应用的建议规则.如果您遇到此问题,那么可能正如Szer所提到的那样,您已启用C#6.0语言级别.

要禁用它,只需在解决方案资源管理器中单击您的项目,然后将C#语言级别设置为C#6.0以外的其他级别.

PS:由于我对更改项目设置的了解有限,我不知道有什么功能来设置它.虽然我不记得改变了它(C#语言水平).谢谢你的帮助.

c# lambda

17
推荐指数
1
解决办法
1万
查看次数

按字符串排序std :: vector <std :: pair <std :: string,bool >>?

我如何vector通过比较pair.first哪一个来对此进行排序std::string?(不提供静态比较功能,也不使用boost).

c++ sorting stl vector std-pair

14
推荐指数
1
解决办法
1万
查看次数

反应性扩展OnNext

使用RX Subject,OnNext()从多个线程调用是否可以线程安全?

因此序列可以从多个源生成.

合并做同样的事情?

multithreading system.reactive c#-4.0

12
推荐指数
3
解决办法
4398
查看次数

我何时以及为什么需要supportedRuntime元素和sku属性?

在Visual Studio中创建的大多数(如果不是全部)C#(和F#和VB)库和可执行项目中,都有一个自动添加的app.config文件,它指定运行时版本和目标框架名字对象(TFM):

<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
. . .
Run Code Online (Sandbox Code Playgroud)

即使app.config完全没有文件,编译器似乎总是生成一个汇编级属性,因为ILDASM显示:

.custom instance void [mscorlib]System.Runtime.Versioning.TargetFrameworkAttribute::.ctor(string) = ( 01    // ....NETFramework
                                                                                                      ..    // ,Version=v4.6.1.
                                                                                      bytes snipped-> ..    // .T..FrameworkDis
                                                                                                      ..    // playName..NET Fr
                                                                                                      61  ) // amework 4.6.1
Run Code Online (Sandbox Code Playgroud)

.csproj文件确实指定了目标框架,我猜这是目标在构建期间从编译器传递到编译器的位置.

如果没有<startup>配置文件中的部分,可执行文件似乎运行得很好.文档解释了什么做的属性意味着,但是,看到他们很多年了,我永远无法理解为什么他们需要在配置文件中 不过,我主要处理Windows的桌面应用程序.

这个答案明确指出"使编译为目标.NET 4.0的程序行为就像它在更高版本上运行一样是不可能的",如果反过来说,在框架的较低版本上运行程序也会让我感到非常惊讶可能.

那么,在什么情况下,应用程序开发人员需要在应用程序的.config文件中指定运行时的版本和TFM ,并且是否必须始终复制编译器硬编码到二进制文件中的信息?这项要求乍一看似乎违反直觉.


更新2018-06-29:X-ref:我要求澄清GitHub问题dotnet/docs#6234中的文档.

.net clr version .net-4.0

11
推荐指数
1
解决办法
776
查看次数

如何使用.Net(C#)在Windows中安全地存储AES密钥?

我一直在寻找一种存储给定AES密钥的方法,以便无法检索它,但它仍然可以用于加密和解密(使用C#).我认为可以在这里找到非对称密钥存储的等价物,但我正在寻找可用于对称加密的东西.它是否以托管形式存在(pre .Net 4)?

c# windows security encryption

10
推荐指数
2
解决办法
7652
查看次数

任何可以为 pybind11 导出结构体所有成员变量的 C++ 宏

我有一个简单的结构,例如:

struct Config {
  bool option1;
  bool option2;
  int arg1;
};
Run Code Online (Sandbox Code Playgroud)

使用 pybind11,我必须导出成员变量,例如:

py::class_<Config>(m, "Config")
    .def_readwrite("option1", &Config::option1)
    .def_readwrite("option2", &Config::option2)
    .def_readwrite("arg1", &Config::arg1);
Run Code Online (Sandbox Code Playgroud)

当这些结构体比较少的时候,写上面的就可以了。但当我有大量简单的结构时,它就变得乏味了。

有没有一个方便的宏,我可以这样写:

PYBIND_EXPORT_STRUCT(Config1);
PYBIND_EXPORT_STRUCT(Config2);
...
Run Code Online (Sandbox Code Playgroud)

每个扫描并导出所有给定结构的成员变量?

如果我已经以这种形式编写结构会有帮助吗:

struct Config {
    ADD_PROPERTY(bool, option1);
    ADD_PROPERTY(bool, option2);
    ADD_PROPERTY(int, arg1);
};
Run Code Online (Sandbox Code Playgroud)

我的问题涉及两个部分:

  1. 将成员变量反映回其名称字符串。
  2. 遍历成员。struct

我知道自省可以解决第一部分,使用typeid(arg1).name()检索名称字符串。

对于第二部分,C++不直接支持。然而,我试图通过这里的一些答案来弄清楚。

剩下的问题是如何融合上述两部分以获得我想象的PYBIND_EXPORT_STRUCT()功能的有效实现。

也就是说,我不介意以完全不同的表示形式表达我的结构(例如使用宏或元组)。只要我在使用 pybind11 导出结构成员时不必再次枚举它们,任何都可以,并且我仍然可以像config1.option1=true在 C++ 代码中一样使用变量。

c++ c++11 pybind11

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

我可以在功能上连接数字和字符串吗?

我试图创建一个在字符串中嵌入数字的纯函数.明显的连接方法不起作用:

pure string foo(immutable int bar)
{
    return "Number: " ~ bar; // Error: strings and ints are incompatible.
    return "Number: " ~ to!string(bar); // Error: to() is impure.
}
Run Code Online (Sandbox Code Playgroud)

是否有一种干净,实用的方式来连接数字和字符串?我想避免编写自己的连接或转换函数,但如果必须,我会.

functional-programming casting d concatenation phobos

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