小编Shr*_*ike的帖子

是否可以在.NET中调用堆栈中的每个帧获取参数值

我在谈论托管的.NET代码.如果我们运行任何程序并将VS附加到它,我们可以看到调用堆栈中每个方法的参数值.我想创建一个日志记录解决方案,它将记录调用堆栈中每个方法的所有参数值.实际上我需要这个信息,以防发生异常.

我知道可以通过分析API来实现.但我想知道只有托管代码才有可能吗?

更新:好的,可能使用纯.NET,这是不可能的.然后可能有某种非托管代码......重点是从应用程序本身内部执行此操作.在异常的情况下,应用程序可以调用某个库(可能是非托管的),它返回有关调用堆栈中方法值的信息.只是想一想......

.net clr diagnostics

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

如何从Visual Studio调试在Linux Docker容器中运行的.NET Core应用程序

我有自己的手写Dockerfile/docker-compose文件.我从命令行启动容器.现在我想将VS2017(不是VSCode)连接到Docker(基于Linux)容器中的应用程序.它似乎应该是相当容易的任务,但我找不到任何有关如何执行此操作的信息.

我仔细阅读了指南https://github.com/Microsoft/MIEngine/wiki/Offroad-Debugging-of-.NET-Core-on-Linux---OSX-from-Visual-Studio.起初它看起来像我需要的 - 关于如何远程调试在Linux中运行的netcore应用程序的描述.但它只讲述了故事的一部分 - 如何通过SSH进行调试.刚刚提到Docker,但没有说明如何远程调试Docker中的应用程序.
我想这里应该没有太多具体的Docker,它只是在Docker中运行vsdbg并附加在这里.但显然这是一个非常常见的开发用例,并且奇怪的是没有关于此的好消息.

当然,还有VS Tools for Docker,我们可以轻松地在Docker容器中调试应用程序.但对我来说VS Tools for Docker非常糟糕.是的,他们一开始就无缝工作.但绝对不清楚幕后发生了什么.

看起来我们只是可以查看Docker的VSTools并尝试重现它.但这不是很明显.它为docker-compose(docker-compose.vs.debug.g.yml)添加了一个额外的"debug"yaml文件,它应该可以进行调试.我把那个yaml添加到我手写的docker-compose,运行Dockers但是如何附加VS?我获得了我的容器的IP,试图在该IP上找到一个远程调试器,并且4022 VS看不到任何东西.此外,由Tools for Docker创建的debug.yaml对于暴露4022端口没有任何意义,这是可疑的.

PS在Windows容器上找到了一个很好的指南 - https://github.com/riskfirst/debugging-aspnet-core-windows-docker

debugging remote-debugging visual-studio docker .net-core

10
推荐指数
1
解决办法
3327
查看次数

MVC:如何从父(主)视图(布局视图)中使用(渲染)部分?

给定视图层次结构:Index.cshtml - > _Layout.cshtml - > _MasterLayout.cshtml:

_MasterLayout.cshtml - 我想在主布局中使用的部分集(下面)

@section javascriptLinks {
<script src="~/client/vendor/require-jquery.js" data-main="~/client/main.js" type="text/javascript"></script>
}
@RenderBody()
Run Code Online (Sandbox Code Playgroud)

_Layout.cshtml - 实际站点主布局

@{
  Layout = "~/Views/Shared/_MasterLayout.cshtml";
}

<!doctype html>
<html>
<!-- actual site layout here -->
<body>
@RenderBody()
@RenderSection("javascriptLinks")
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Index.cshtml - 一些具体的页面特定标记

拆分_Layout.cshtml和_MasterLayout.cshtml的想法是代码共享.我有一种库/框架,_MasterLayout属于这个库._Layout.cshtml是具体的应用程序站点主布局.

不幸的是,这种架构不起作用.在渲染过程中,_Layout.cshtml将不会看到_MasterLayout.cshtml中的部分.

有没有办法在这种情况下使用部分(从父视图中获取它们而不是从子视图中获取)?

我能看到的一个可能的解决方案是在_MasterLayout.cshtml中为每个部分创建单独的页面,并在_Layout中调用@RenderPage.但是,我想拥有一个共享资产(_MasterLayout.cshtml).

asp.net-mvc

9
推荐指数
1
解决办法
6239
查看次数

通过命名管道从Windows服务(会话#0)连接到桌面应用程序(会话#1)

鉴于:
- 应用程序 - 桌面GUI(WPF).NET应用程序
- 监视应用程序的Windows服务(.NET也)

Windows服务定期"ping"应用程序以确保它是健康的(如果它不是winservice将重新启动它).
我打算通过命名管道实现"pinging".为了简单起见,我决定使用WCF.该应用程序托管一个WCF服务(一个操作Ping返回一些东西).Windows服务是此WCF服务的客户端,基于计时器定期调用它.

这一切都在Windows 7中
.Windows服务在LocalService下运行(在会话#0中).
桌面应用程序在当前登录的用户下运行(在会话#1中).

问题:
Windows服务无法在桌面应用程序中看到创建并正在侦听的WCF端点(使用NetNamedPipeBinding).这意味着通过wcf代理调用时,我得到了这个异常:"在本地计算机上找不到管道端点'net.pipe:// localhost/HeartBeat'"

我确信代码没问题,因为另一个桌面应用程序(在会话#1中)可以看到端点.

显然,我在处理Win32系统对象隔离的一些安全性问题.但我相信应该有办法解决我遇到过的限制问题.
我可以牺牲WCF方法并采用原始的NamedPipe方式.

security wcf winapi named-pipes netnamedpipebinding

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

aspnetcore:如何从中间件返回视图

我正在为aspnetcore2.0的中间件工作,我想执行一些剃刀视图.
实际上我需要一个错误处理中间件,它会从剃刀视图中显示漂亮的页面.我知道可以UseStatusCodePagesWithReExecute根据状态代码进行操作.但是我需要一种更通用的方法 - 在我的中间件中处理异常,以便将它(在某些情况下)委托给错误视图.

我意识到这DeveloperExceptionPageMiddleware与我需要的东西类似.但即使在深入研究其来源后,我也无法理解它是如何运作的.

这是中间件返回视图的地方 - https://github.com/aspnet/Diagnostics/blob/dev/src/Microsoft.AspNetCore.Diagnostics/DeveloperExceptionPage/DeveloperExceptionPageMiddleware.cs#L206

但我无法理解它是什么样的观点.它既不是剃刀页面(因为它没有@page指令)也不是mvc视图(但我不确定).

在该项目中,该视图有两个文件:ErrorPage.cshtmlErrorPage.Designer.cs.Designer.cs是如何创建的?它看起来像生成的文件.但是由于它在项目(ErrorPage)中有一个可以显式使用的普通类.它Microsoft.Extensions.RazorViews.BaseViewMicrosoft.Extensions.RazorViews.Sources包继承类.

所以中间件只是执行该视图:

var errorPage = new ErrorPage(model);
return errorPage.ExecuteAsync(context);
Run Code Online (Sandbox Code Playgroud)

如何在我的项目中实现?

razor .net-core asp.net-core asp.net-core-2.0

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

.NET Core:在 Docker 中的 Linux 上使用 System.Drawing.Common - “无法打开显示”错误

我已将代码移植到使用 System.Drawing 的 .NET Core。目前,corefx 的 System.Drawing.Common 似乎支持Linux。但是我在 Linux 上运行我的代码有困难。

特别是我得到:

NotSupportedException “无法打开显示(需要 X-Server。检查您的 DISPLAY 环境变量)”

对于此代码:

Graphics gr = Graphics.FromHwnd(IntPtr.Zero);
Run Code Online (Sandbox Code Playgroud)

以前我得到

DllNotFoundException “无法加载 DLL 'libX11':找不到指定的模块或其依赖项之一。\n(来自 HRESULT 的异常:0x8007007E)”

使用堆栈跟踪:

   at System.Drawing.LibX11Functions.XOpenDisplay(IntPtr display)
   at System.Drawing.Graphics.FromHwnd(IntPtr hwnd)
   at mycode
Run Code Online (Sandbox Code Playgroud)

但是我通过安装libx11-devpackage.json解决了这个问题。

这是我的 Dockerfile:

FROM microsoft/aspnetcore
ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE true

# install libgdiplus for System.Drawing
RUN apt-get update && \
    apt-get install -y --allow-unauthenticated libgdiplus libc6-dev

# install x11 for System.Drawing
RUN apt-get update && \
    apt-get install -y --allow-unauthenticated libx11-dev …
Run Code Online (Sandbox Code Playgroud)

linux x11 system.drawing .net-core

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

用于发现.NET代码依赖关系的工具(不是VS2010)

鉴于一个非常大的.NET代码库.源中的某些部分和二进制文件中的某些部分.这都是.NET代码.我想有一个工具来发现代码库中的依赖项.按装配和按类型.以图形形式显示依赖关系是非常好的.
我想要:实例化图,重新生成图,调用图,类型依赖图.

对于一个实例,从一个图表中获取一个类并从他的角度获得所有类型的依赖关系,并且能够按汇编/ namaspace/etc进行过滤.

我知道反射器可以做到.VS2010旗舰版可以做到这一点.但它们都有一些缺点:

  • Reflector是一个很好的工具,但它的依赖可视化设施非常有限
  • VS2010太懒了.它看起来像玩具不是一个成熟的工具(我的意思是它的图表设施).

ps已经问过某个地方?好吧,把我指向那个地方.TNX.

.net dependencies visualization

6
推荐指数
2
解决办法
2580
查看次数

HTML5 AppCache:如果无法访问服务器但可以访问网络,如何实现脱机模式

按设计HTML5脱机支持(AppCache)可在客户端设备脱机或客户端设备联机且服务器可访问时工作.之后我缓存了应用程序并在浏览器(刷新它)中重新打开它,当设备无法访问互联网时,浏览器从AppCache加载应用程序.在这种情况下,浏览器不会尝试获取appcache清单(它知道我们处于脱机状态).

但是让我们考虑一下我的设备没有脱机的情况.它仍然有互联网连接.但是我的服务器坏了.可能有许多不同的原因(硬件故障,AppPool停止,IIS限制,DNS错误等).在这种情况下,当我在浏览器中打开缓存的应用程序时,它将尝试获取appcache清单并获得404错误(未找到).然后浏览器清除应用程序的AppCache!因此,在下一次运行时,它不会从AppCache加载它并显示404错误"page".没有更多的离线工作.

对我来说,离线模式功能取决于服务器无法访问的原因看起来很奇怪.我为什么要关心用户(没有互联网连接或服务器关闭)?

所以我的问题是:做任何人知道什么办法可以使应用程序在工作时的设备在线,但它的服务器不可用?
理想情况下,我应该能够捕获window.applicationCache的错误事件并告诉它"它没关系,请继续使用缓存,不要废弃它".

html5 offlineapps html5-appcache

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

在ASP.NET 5 MVC6中使用什么而不是WebViewPage.RenderPage方法

给出一个基于旧MVC5的示例:Views/Shared/Index.cshtml - 一个SPA应用程序的视图.它包含一些标记和对布局页面的引用:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)

在_Layout.cshtml中,有许多包含通过RenderPage帮助程序使用的包含:

@RenderPage("~/Views/Shared/_ImportCssInline.cshtml")
@RenderPage("~/Views/Shared/_ImportCssLinks.cshtml")
Run Code Online (Sandbox Code Playgroud)

现在在AspNet5中,@RenderPage助手不可用.这是WebViewPage/ WebPageBase/ 的方法WebPageRenderingBase.现在他们被替换了RazorPage.但它没有RenderPage方法.

应该用什么呢?

ps 问题

asp.net-core-mvc asp.net-core

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

ASP.NET 4 WebApi:带斜杠的路由

我有一个WebApi路由api/{type}({id})/{prop} ,我想用url调用它/api/User(domain\username)/groups- 关键点是id值"\" .我从客户端url编码发送它,即: api/User(domain%5Cusername)/groups.但路线被忽略了,我得到了404.

如何将斜线传递回路线的参数?

asp.net asp.net-mvc-4 asp.net-web-api asp.net-web-api-routing

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