在 asp.net 5/vnext 上的磁盘上没有 dll 的代码合同
Posted
技术标签:
【中文标题】在 asp.net 5/vnext 上的磁盘上没有 dll 的代码合同【英文标题】:Code Contracts with no dlls on disk on asp.net 5/vnext 【发布时间】:2015-02-10 02:53:09 【问题描述】:Asp.Net vnext/5 使用 roslyn 进行动态编译,根本不生成任何程序集。大多数代码合约工具使用编译时代码转换将合约转换为运行时检查。
它将如何与 Asp.Net 5 一起工作?我喜欢在参数上使用像 [NotNull] 这样的基于属性的合约,但是如果你没有编译步骤和程序集,所有这些都不起作用。
有什么想法吗?
【问题讨论】:
【参考方案1】:构建时的默认行为如您所说,但如果您愿意,您仍然可以选择创建输出文件。
如果您在命令行工作,请转到您的project.json
文件的位置并使用kpm build
命令。这将生成 Nuget 包,并将 dll 留在您所定位的每个框架的熟悉位置。
例如,如果您的目标是 aspnet50,
,您最终可能会得到 \bin\Debug\YourProject.Version.nupkg
和 \bin\Debug\aspnet50\YourProject.dll.
Nuget 包将包含您所针对的每个框架的必要程序集,并且您将在构建配置文件夹(例如 Debug)内为每个具有 DLL 的框架提供一个目录。
如果您使用的是 Visual Studio 2015 预览版,则可以更改项目的默认构建行为,以便在每次构建时为您执行相同的操作。为此,只需右键单击解决方案资源管理器中的项目并选择 Properties.
在 Build
选项卡上,有一个用于创建构建输出的复选框,它将让 Visual Studio 构建包并在每次构建时编写 DLL就像您手动使用 kpm build
一样。
【讨论】:
也发现了 - 太好了!但是,如果我使用第三方工具,他们需要明确的构建过程,这会带来一些不便。让 roslyn 做元编程部分会很好,因为它无论如何都是编译器即服务。可悲的是,roslyn 团队似乎故意忽略了这条路,等待社区提出新的东西。这不会发生,除非 roslyn 中有精心设计的扩展点,允许更改运行时行为 - 每个人都可以分叉和更改代码,但这不会改变我的 VS 构建。以上是关于在 asp.net 5/vnext 上的磁盘上没有 dll 的代码合同的主要内容,如果未能解决你的问题,请参考以下文章
防止在 asp.net 5 (vNext) 中对预检 OPTIONS 请求进行基于令牌的授权