我在谈论托管的.NET代码.如果我们运行任何程序并将VS附加到它,我们可以看到调用堆栈中每个方法的参数值.我想创建一个日志记录解决方案,它将记录调用堆栈中每个方法的所有参数值.实际上我需要这个信息,以防发生异常.
我知道可以通过分析API来实现.但我想知道只有托管代码才有可能吗?
更新:好的,可能使用纯.NET,这是不可能的.然后可能有某种非托管代码......重点是从应用程序本身内部执行此操作.在异常的情况下,应用程序可以调用某个库(可能是非托管的),它返回有关调用堆栈中方法值的信息.只是想一想......
我有自己的手写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
给定视图层次结构: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).
鉴于:
- 应用程序 - 桌面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方式.
我正在为aspnetcore2.0的中间件工作,我想执行一些剃刀视图.
实际上我需要一个错误处理中间件,它会从剃刀视图中显示漂亮的页面.我知道可以UseStatusCodePagesWithReExecute根据状态代码进行操作.但是我需要一种更通用的方法 - 在我的中间件中处理异常,以便将它(在某些情况下)委托给错误视图.
我意识到这DeveloperExceptionPageMiddleware与我需要的东西类似.但即使在深入研究其来源后,我也无法理解它是如何运作的.
但我无法理解它是什么样的观点.它既不是剃刀页面(因为它没有@page指令)也不是mvc视图(但我不确定).
在该项目中,该视图有两个文件:ErrorPage.cshtml和ErrorPage.Designer.cs.Designer.cs是如何创建的?它看起来像生成的文件.但是由于它在项目(ErrorPage)中有一个可以显式使用的普通类.它Microsoft.Extensions.RazorViews.BaseView从Microsoft.Extensions.RazorViews.Sources包继承类.
所以中间件只是执行该视图:
var errorPage = new ErrorPage(model);
return errorPage.ExecuteAsync(context);
Run Code Online (Sandbox Code Playgroud)
如何在我的项目中实现?
我已将代码移植到使用 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) 鉴于一个非常大的.NET代码库.源中的某些部分和二进制文件中的某些部分.这都是.NET代码.我想有一个工具来发现代码库中的依赖项.按装配和按类型.以图形形式显示依赖关系是非常好的.
我想要:实例化图,重新生成图,调用图,类型依赖图.
对于一个实例,从一个图表中获取一个类并从他的角度获得所有类型的依赖关系,并且能够按汇编/ namaspace/etc进行过滤.
我知道反射器可以做到.VS2010旗舰版可以做到这一点.但它们都有一些缺点:
ps已经问过某个地方?好吧,把我指向那个地方.TNX.
按设计HTML5脱机支持(AppCache)可在客户端设备脱机或客户端设备联机且服务器可访问时工作.之后我缓存了应用程序并在浏览器(刷新它)中重新打开它,当设备无法访问互联网时,浏览器从AppCache加载应用程序.在这种情况下,浏览器不会尝试获取appcache清单(它知道我们处于脱机状态).
但是让我们考虑一下我的设备没有脱机的情况.它仍然有互联网连接.但是我的服务器坏了.可能有许多不同的原因(硬件故障,AppPool停止,IIS限制,DNS错误等).在这种情况下,当我在浏览器中打开缓存的应用程序时,它将尝试获取appcache清单并获得404错误(未找到).然后浏览器清除应用程序的AppCache!因此,在下一次运行时,它不会从AppCache加载它并显示404错误"page".没有更多的离线工作.
对我来说,离线模式功能取决于服务器无法访问的原因看起来很奇怪.我为什么要关心用户(没有互联网连接或服务器关闭)?
所以我的问题是:做任何人知道什么办法可以使应用程序在工作时的设备是在线,但它的服务器不可用?
理想情况下,我应该能够捕获window.applicationCache的错误事件并告诉它"它没关系,请继续使用缓存,不要废弃它".
给出一个基于旧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 问题
我有一个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
.net-core ×3
.net ×2
asp.net-core ×2
asp.net ×1
asp.net-mvc ×1
clr ×1
debugging ×1
dependencies ×1
diagnostics ×1
docker ×1
html5 ×1
linux ×1
named-pipes ×1
offlineapps ×1
razor ×1
security ×1
wcf ×1
winapi ×1
x11 ×1