小编Joh*_*ohn的帖子

在Powershell中打印对象属性

在交互式控制台中工作时,如果我定义一个新对象并为其分配一些属性值,如下所示:

$obj = New-Object System.String
$obj | Add-Member NoteProperty SomeProperty "Test"
Run Code Online (Sandbox Code Playgroud)

然后,当我在交互式窗口中键入我的变量名称时,Powershell为我提供了对象属性和值的摘要:

PS C:\demo> $obj
SomeProperty                                                                                                                                                                                  
------------                                                                                                                                                                                  
Test
Run Code Online (Sandbox Code Playgroud)

我基本上想要这样做,但是从脚本中的函数内部做.该函数创建一个对象并设置一些属性值,我希望它在返回之前将对象值的摘要打印到Powershell窗口.我尝试在函数中使用Write-Host:

Write-Host $obj
Run Code Online (Sandbox Code Playgroud)

但这只是输出对象的类型而不是摘要:

System.Object
Run Code Online (Sandbox Code Playgroud)

如何让我的函数输出对象属性值的摘要到Powershell窗口?

powershell

98
推荐指数
5
解决办法
13万
查看次数

在Visual Studio 2015 Web项目中使用命令行中的npm

安装Visual Studio 2015后,我可以使用新的编辑器功能,根据此文档,在Web项目中添加依赖关系到Node包和恢复等:http: //webtooling.visualstudio.com/package-managers/npm/

大概Visual Studio必须在某处安装node/npm以支持这些功能,但是它似乎没有修改我的PATH以在命令行上(或通过Visual Studio 2015命令提示符)提供这些工具.

如果我想从命令行对我的项目执行一些npm操作,我可以在不再安装node/npm的情况下执行此操作(这可能与Visual Studio正在使用的npm/node版本不同步)或者是否有办法访问Visual Studio从命令行使用的节点/ npm安装?

visual-studio npm visual-studio-2015 asp.net-core

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

如何为面向.Net Core的ASP.Net 5应用程序构建MSDeploy包

我正在尝试配置Visual Studio Online以将我的ASPNET 5应用程序连续部署到Azure webapp,如本教程中所述,来自Team Foundation Build文档:https://msdn.microsoft.com/Library/vs/alm/Build/天蓝色/部署,aspnet5

我已经完成了所有步骤,一切都很顺利.默认情况下,此脚本部署我的应用程序版本,该应用程序以完整的.Net 4.5.1 DNX为目标,因此我决定尝试修改它以部署.Net Core.

构建脚本通过调用以下方式创建其部署包:msbuild.exe /t:Build,FileSystemPublish 在调高日志详细程度并阅读相关的msbuild文件后,我学到了以下内容:

"Build"目标最终使用dnx.exe来编译项目.因为project.json文件包含dnx451和coreclr TFM,所以这一步为两个框架产生了构建输出 - 到目前为止一直很好.

但是,FileSystemPublish目标似乎只输出一个针对.Net 4.5.1运行时的msdeploy包.从日志中我可以看到执行FileSystemPublish目标最终会发出"dnu publish"命令,在我的情况下,将"dnx-clr-win-x86.1.0.0-beta6"作为-runtime参数传递.当我按照面包屑找出它的位置时,我的值"dnx-clr-win-x86.1.0.0-beta6"最终出现在Microsoft.DNX.Tasks.dll中的"GetRuntimeToolingPath"任务中.此任务似乎在global.json中查找以确定要使用的正确运行时,但奇怪的是在创建返回字符串之前,在内部用"x86"和"clr"覆盖此值.

如果我正确地解释了事情,似乎FileSystemPublish目标(在Microsoft.DNX.Publishing.targets中)基本上(间接)硬连线,以便在生成其包输出时使用x86,完整的.Net框架DNX.在这一点上,我不知道如何让这个构建过程生成.Net Core包.

我的问题是为什么FileSystemPublish会与x86完整的.Net DNX耦合,并且考虑到这种情况(除非我弄错了)为ASPNet 5应用程序生成一个针对.Net核心的msdeploy包的推荐方法是什么?

编辑: 目前我有一个解决方法.我可以/p:RuntimeToolingDirectory="C:\Users\buildguest\.dnx\runtimes\dnx-coreclr-win-x64.1.0.0-beta6"作为参数传递给msbuild.这将覆盖GetRuntimeToolPath中的默认逻辑并强制它使用.Net Core.这有效,但感觉就像一个黑客,所以我将问题留给更好的答案.

msbuild packaging msdeploy azure-devops asp.net-core

14
推荐指数
2
解决办法
3495
查看次数

Dependency-Inversion Principal(DIP)如何减少在依赖模块发生变化时对依赖模块进行更改的需求?

我最近在Robert.C.Martin的优秀着作Agile Principals,C#中的模式和实践中读到了依赖性 - 倒置主体.然而,这个原则的一个方面我觉得我不完全理解.

Robert解释说,当高级模块依赖于较低级别的模块时,较低级别模块的更改可能会导致更高级别的模块也发生变化.他通过以下示例演示了这一点:

public class Button
{
   private Lamp lamp;
   public void Poll(){
      if(/*some condition*/)
         Lamp.TurnOn();
   }
}
Run Code Online (Sandbox Code Playgroud)

关于这段代码罗伯特说:"Button类直接依赖于Lamp类.这种依赖性意味着Button会受到Lamp变化的影响."

正如我所看到的,我们可能会对Lamp类进行两种可能的更改:

1)我们可能想要更改类的内部实现,但不会影响公共接口.

2)我们可能决定更改公共接口以将参数传递给TurnOn方法.

我不明白的是,在第一种情况下,为什么我们的更改会导致Button类的更改?Lamp的公共接口没有改变,为什么Button需要改变?

在第二种情况下,我可以看到这将需要我们更改Button.但在这种情况下,取决于抽象如何改变这一点?当然,如果我有正当理由将接口更改为Lamp,那么我也将改变Lamp和Button所依赖的抽象中的界面.在这种情况下,我必须改变Button,因为它依赖的抽象已经改变.

我意识到DIP还有其他好处,例如更高级别模块的可重用性,更高级别模块的接口所有权以及在运行时选择依赖项实现的能力,但是我很难理解DIP如何减少依赖的需求当到较低级别模块的接口改变时改变的模块和/或从属模块中的内部改变可能导致更高级别模块的改变的原因.

dependencies inversion-of-control

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

Chrome 开发工具中的“绘制”和“光栅化绘制”有什么区别?

我一直在此处此处阅读有关 chrome 中的关键渲染路径的内容。我对这些资源的理解是,“合成”步骤发生在主线程之外,并且依赖于先前的“绘制”步骤,该步骤生成要合成在一起的光栅化层。

然而,当我在 Chrome 开发工具中查看位置动画的单帧期间发生的情况时,我看到了以下内容:

在此输入图像描述

  1. 看起来“合成”发生在主线程上,这不是我通过阅读这些资源所理解的。
  2. 合成之前,主线程上有一个绘制步骤,但在“光栅化线程”上合成之后,还有另一个“光栅化绘制”步骤。

那么“绘画”和“光栅化绘画”之间有什么区别,为什么光栅化绘画步骤会在合成完成后发生?为什么合成似乎发生在 chrome 开发工具的主线程上,但文档将其描述为发生在不同的线程上?

google-chrome google-chrome-devtools web-performance

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

使用Node.js API时,在webpack-dev-server中实时重新加载

如果我设置一个非常简单的webpack项目并安装webpack-dev-server,当我从命令行或通过npm脚本运行"webpack-dev-server --open"时,默认情况下会重新加载.即只要我编辑源文件,就会重建捆绑包并自动重新加载浏览器.

但是,如果我使用Node API来启动webpack-dev-server,请使用以下代码:

const WebpackDevServer = require('webpack-dev-server');
const webpack = require('webpack');
const webpackConfig = require('../webpack.config.dev');
const open = require('open');

const port = 3000;

let compiler = webpack(webpackConfig);
let server = new WebpackDevServer(compiler, {
  contentBase: "./src",
});

server.listen(port, "localhost", function(err) {
  if(err){
      console.log(err);
  }
  else{
      open('http://localhost:' + port);
  }
});
Run Code Online (Sandbox Code Playgroud)

我放松了实时重装.当我更改源文件时,我可以看到webpack从命令行输出重建包,但浏览器不会刷新.

请注意,在我的情况下,不需要热模块重新加载,实际上是不可取的.我只是希望页面在使用webpack-dev-server CLI时完全按照默认情况进行刷新.

webpack webpack-dev-server

2
推荐指数
1
解决办法
1625
查看次数