问题标签 [fody]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 将 Fody.PropertyChanged 与 MVVMCross 一起使用是否安全,或者它会降低应用程序的性能?
今天我在网上阅读了关于Fody.PropertyChanged的新插件,它非常简单易用。
目前我正在使用 MVVMCross ,我们必须一次又一次地调用RaisePropertyChange(()=>Property) 。将Fody.PropertyChanged与 MVVMCross一起使用是否安全?任何人都有这方面的经验,我也观看了这个使用 MVVMCross 和 Foody.RaisePropertyChange 的例子
或者在 MVVMCross 中是否有任何解决方案可以让我们一次又一次地摆脱使用 RaisPropertyChange()
谢谢,
最良好的问候
c# - 重写 IL 以在方法调用周围注入 try-finally
我想将 sql 日志记录注入到一些方法中。基本上我想改造
进入
我得到了简单的案例,我目前面临的问题是进入.try
.
我最初的假设是它IDbCommand
本身是在调用之前直接加载的ExecuteScalar
,所以我搜索 callvirt 然后将Instruction.Previous
其用作.try
.
但如果之后使用 的返回值ExecuteScalar
,编译器会生成以下 IL:
使用我的原始算法,这被转换为
然后 PEVERIFY 抱怨我输入了一个非空堆栈的 .try 。
有没有一种简单的方法可以在 ExecuteScalar 上注入 try-finally 或者我是否需要对整个方法进行完整的流分析,计算任意点的堆栈深度,然后在 try/finally 之前/之后加载/恢复值?
编辑:
我已经能够通过向上/向下扫描来使其工作,直到找到堆栈深度为 0 的两个点。在我有限的测试中,这似乎有效,但我仍然对“干净”实现感兴趣,而不是盲目地扫描 IL。
msbuild - 如何防止 NuGet 在还原包时询问是否覆盖文件?
我们最近将 Fody 添加到我们的一些项目中,并且在本地这很好,但是在 TeamCity 构建服务器上,这会导致问题,我可以通过在VS2015的包管理器控制台中运行以下命令来在本地复制:
在构建服务器上,此消息一遍又一遍地重复,直到日志文件耗尽服务器数据驱动器上的所有可用空间(最后一个 TC 日志变为 28GB!)
我试过-NonInteractive
了,但这似乎对构建服务器没有影响,并且在本地,在包管理器控制台中它说它无法识别该参数:
tfs - TFS 不编织 Fody 组件
我正在尝试在我的项目中使用 Fody.PropertyChanged,所以我已经添加[ImplementPropertyChanged]
到我的课程中。
在我的开发机器上,这一切都在本地运行良好。
但是,在反编译 TFS 生成的二进制文件时,我发现它们没有被编织:它们仍然具有 Fody 属性。
FodyWeavers.xml 有 veaver:
我在哪里看,看什么,找出为什么我的组件没有编织?
谢谢!
c# - 正确的架构:在 .NET 中向域模型添加属性
背景
我喜欢Jeffrey Palermo 的洋葱架构模型(类似于Hexagonal Architecture),它规定域模型位于“中心”,基础设施的具体实现,特别是具体存储库位于外围。
所以说我有一个领域模型:
现在我需要将此领域模型公开给其他团队:
- UI 团队假设想要添加几个数据验证属性和自定义 JSON 序列化属性。
- 基础架构团队假设想要添加 XML 序列化属性和来自 3rd 方数据库实现的一些自定义属性。
- 公共 API 团队假设想要添加 WCF 属性。
我不想让每个团队全权委托将他们的属性添加到我的域模型中 ,我特别不希望他们将所有“特定于层”的依赖项添加到我的模型程序集中。
而且这种情况变得更加复杂,因为我自己使用了第 3 方“域模型”(在这种情况下,使用 Google 的LibPhoneNumber来处理电话号码)。
理想情况下,他们每个人都需要创建自己的包装类,例如:
问题
编写和维护UISpeaker
类是一件痛苦的事,而且是无聊的样板代码。
有没有更好的方法来添加每个团队想要添加的属性而不让他们直接编辑域模型?或者是否有一些工具可以帮助生成这些包装类(我在想可能是像Fody或T4 Templates这样的编织工具,但我对这两种工具都不太熟悉,不知道它们是否可以在这个用例中提供帮助)。
研究
我环顾 Stackoverflow 并发现了一些类似的问题,但没有一个问题能达到我正在寻找的全部范围:
避免在域模型中使用 JsonIgnore 属性- 结论是仅在域模型上使用 .NET 本机属性,因此您不必依赖 Json.Net
将属性添加到另一个程序集的类- 讨论
CustomReflectionContext
用于将属性添加到现有类型。这看起来真的很酷,但不幸的是,该模型将被移交给第 3 方代码(ORM、EF、Json.Net 等)进行反射,所以我认为这不会在这里工作。在 DDD 中拥有单独的域模型和持久性模型- 确认每一层都应该有自己的域模型版本,但没有讨论是否有任何工具/策略可以使编写/维护该代码更容易。
c# - 重命名项目→“无法解析此引用。找不到程序集”
每次构建解决方案时,都会收到以下警告:
警告 无法解析此引用。找不到程序集“WordAPI”。检查以确保该程序集存在于磁盘上。如果您的代码需要此引用,您可能会遇到编译错误。提供主机
然而,一切似乎都很好,这只是一个警告,但这让我很烦恼。
怎么开始的?
我重命名了我的解决方案中的一个项目。使用右键单击-> 重命名选项。我还使用搜索和替换来重命名项目中所有文件的命名空间。更改了 AssemblyInfo.cs 文件。在应用程序选项卡上的项目属性中,我更改了Assembly Name
and Default Namespace
。如果重要的话,我也在使用Costura.Fody。
我是如何尝试修复它的?
/li>HintPath
我在执行程序集的项目文件中更改了:- 从我正在执行的程序集中删除了引用并重新添加了它。
- 在解决方案中删除了我的调试/发布文件夹并重建了解决方案
我真的找不到解决方案,很想开始一个空白的解决方案,然后复制那里的所有内容......
我的参考的属性:
项目在文件资源管理器中的位置:
c# - Fody Async MethodDecorator 处理异常
我正在尝试使用 Fody 包装从具有通用异常格式的方法抛出的所有异常。
所以我添加了所需的接口声明和类实现,如下所示:
看起来像这样的域实现
这适用于同步代码。但是对于异步代码,会跳过异常处理程序,即使所有其他 IMethodDecorator 都已执行(如OnExit
、 和OnTaskContinuation
)。
例如,查看以下测试类:
我看到这ShouldGetErrorAsync
会产生以下 IL 代码:
并ShouldGetErrorAsync2
生成:
如果我调用ShouldGetErrorAsync
,Fody 将拦截调用,并将方法体包装在 try catch 中。但是,如果该方法是异步的,即使fodyError.OnTaskContinuation(task)
andfodyError.OnExit()
仍然被调用,它也永远不会命中 catch 语句。
另一方面,ShouldGetErrorAsync
即使在 IL 中没有错误处理块,也会很好地处理错误。
我的问题是,Fody 应该如何生成 IL 以正确注入错误块并使其拦截异步错误?
c#-4.0 - 未知的自定义元数据项目种类:使用 Costura.Fody 时为 6
我尝试使用 Costura.Fody 将 DLL 文件嵌入到 exe 文件中。首先,我通过在包管理器控制台中运行此命令来安装 Costura.Fody:,install-package Costura.Fody
然后构建项目。但是构建项目不成功,这是构建项目的错误:
我错过了什么吗?
c# - 为类型创建指令
使用 Mono.Cecil,给定这个方法
我怎样才能创建一个Instruction
可以加载的value
,什么时候value
是类型的Type
?
我注意到什么时候是我可以像这样测试它value
的类型:Type
但我无法弄清楚我需要传递什么Create
才能正确加载值。
编辑:
使用这个:
让我更近一步。它似乎接受类型。但是当我尝试编写程序集时,它会出错:
c# - 如何禁用在调试模式下嵌入 Costura.Fody 资源?
我正在使用 Costura.Fody 将所有 dll 嵌入到我的应用程序程序集中。
有什么方法可以在调试构建模式下禁用 Costura.Fody?如何使 Costura.Fody 仅在发布或自定义构建配置中工作?