小编use*_*157的帖子

Windows命令行:为什么环境变量在&之后不可用

看看下面的命令:为什么a之后的值不可用&

C:\>set a=

C:\>set a=3&echo %a%
%a%

C:\>echo %a%
3

C:\>set a=3&echo %a%
3
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做

C:\>set a=

C:\>set a=3&set
Run Code Online (Sandbox Code Playgroud)

a = 3包含在列出的变量中!

我需要这个我在这里学到的技巧,获取命令的退出代码甚至输出管道: Windows命令解释器:如何获取第一个管道命令的退出代码, 但我必须在make脚本中使用它,这就是为什么一切必须在一行!这就是我想要做的:

target:
    ($(command) & call echo %%^^errorlevel%% ^>$(exitcodefile)) 2>&1 | tee $(logfile) & set /p errorlevel_make=<$(exitcodefile) & exit /B %errorlevel_make%
Run Code Online (Sandbox Code Playgroud)

但是errorlevel_make总是为空(带有退出代码的文件存在且包含正确的退出代码).

这是cmd中的错误吗?任何想法我能做什么?

windows cmd makefile batch-file environment-variables

5
推荐指数
2
解决办法
441
查看次数

如何在.csproj文件中为PackageReference指定targetFramework?

我从VS2017和NuGet依赖项的新PackageReference开始遇到问题。

起初,我为不再需要此多余的packages.config文件而感到兴奋。但是现在我有点失望:

我的某些程序集以Framework 4.0为目标,因为它们也必须能够在XP下运行。其他人没有此限制,并且目标框架为4.6.1。因为没有任何4.0程序集依赖于4.6.1程序集,所以它可以正常工作。只有另一个方向。

大多数程序集使用NLog NuGet包。但是,当使用新的PackageReference选项指定NuGet软件包时,面向框架4.6.1的程序集将始终安装面向.NET 4.5的NLog变体。从那时起,无法再构建依赖于.NET 4.0程序集的其他程序集:

C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Professional \ MSBuild \ 15.0 \ Bin \ Microsoft.Common.CurrentVersion.targets(1987,5):警告MSB3275:主要参考资料为“ Tools,Version = 2.0.0.9180 ,无法解析Culture = neutral,processorArchitecture = MSIL,因为它间接依赖于针对“ .NETFramework,Version = v4.5”框架。这是当前目标框架“ .NETFramework,Version = v4.0”的更高版本。[D:\ Work \ 4.8.0_PackageReference \ Test \ TestApp.csproj]

我想将NLog for .NET 4.0用于所有项目。如果没有packages.config,这真的不可能吗?可以使用targetFramework属性指定所需的框架。但是我找不到新的PackageReference方法来做到这一点。真是难以置信...

.net .net-assembly nuget visual-studio-2017

5
推荐指数
1
解决办法
1707
查看次数

命名管道:ConnectNamedPipe 返回 ERROR_BROKEN_PIPE 后的 ReadFile

我重新激活了几个月前我确信可以使用的代码。它让我发疯,但现在不再了。我在其他问题中找不到答案。

在服务器端,我使用创建一个管道

#define MAX_MESSAGE_LENGTH 1024
SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, TRUE, static_cast<PACL>(0), FALSE);

sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = &sd;
sa.bInheritHandle = FALSE;

auto pipe_name = _T("\\\\.\\pipe\\") + _serviceName;

HANDLE pipe = CreateNamedPipe(
    pipe_name.c_str(),
    PIPE_ACCESS_DUPLEX | FILE_FLAG_FIRST_PIPE_INSTANCE,
    PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,
    1, 
    MAX_MESSAGE_LENGTH, MAX_MESSAGE_LENGTH, // buffer lengths (advisory)
    0, // default timeout of 50ms when WaitNamedPipe uses NMPWAIT_USE_DEFAULT_WAIT
    &sa));
Run Code Online (Sandbox Code Playgroud)

然后一个线程等待传入的客户端ConnectNamedPipeConnectNamedPipe阻塞直到客户端连接

HANDLE pipe = CreateFile(
    pipe_name.c_str(),   // pipe name 
    GENERIC_READ |  // read and write …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi named-pipes server

3
推荐指数
1
解决办法
2645
查看次数