C# asp.net 5/vnext上磁盘上没有DLL的代码收缩

C# asp.net 5/vnext上磁盘上没有DLL的代码收缩,c#,code-contracts,roslyn,asp.net-core,C#,Code Contracts,Roslyn,Asp.net Core,Asp.NETVNEXT/5使用roslyn进行动态编译,根本不生成任何程序集。大多数代码契约工具使用编译时代码转换将契约转换为运行时检查 如何使用Asp.NET5?我喜欢在参数上使用基于attibute的契约,比如[NotNull],但如果没有编译步骤和程序集,所有这些都不起作用 有什么想法吗?构建时的默认行为如您所说,但如果愿意,您仍然可以选择创建输出文件 如果您使用的是命令行,请转到project.json文件的位置,并使用kpm build命令。这将生成Nuget包,并将DLL保留在您针

Asp.NETVNEXT/5使用roslyn进行动态编译,根本不生成任何程序集。大多数代码契约工具使用编译时代码转换将契约转换为运行时检查

如何使用Asp.NET5?我喜欢在参数上使用基于attibute的契约,比如[NotNull],但如果没有编译步骤和程序集,所有这些都不起作用


有什么想法吗?

构建时的默认行为如您所说,但如果愿意,您仍然可以选择创建输出文件

如果您使用的是命令行,请转到
project.json
文件的位置,并使用
kpm build
命令。这将生成Nuget包,并将DLL保留在您针对的每个框架的熟悉位置

例如,如果您的目标是
aspnet50,
您可能会得到
\bin\Debug\YourProject.Version.nupkg
\bin\Debug\aspnet50\YourProject.dll。

Nuget包将包含针对每个目标框架的必要程序集,并且对于每个具有DLL的框架,在构建配置文件夹(例如,Debug)中都有一个目录


如果您使用的是Visual Studio 2015预览,则可以更改项目的默认生成行为,以便对每个生成执行相同的操作。为此,只需在解决方案资源管理器中右键单击项目并选择
属性。
Build
选项卡上,有一个用于创建生成输出的复选框,该复选框将使visual studio生成包并在每个生成上写入DLL,就像手动使用
kpm Build
一样

发现那太好了-太好了!然而,如果我使用第三方工具,他们需要明确的构建过程,这会带来一些不便。最好让roslyn做元编程部分,因为它毕竟是一个编译器即服务(compiler-as-a-service)。不幸的是,roslyn团队似乎故意忽视了这条道路,等待社区拿出一些东西。除非roslyn中有设计良好的扩展点,允许运行时行为改变,否则这不会发生——每个人都可以分叉和改变代码,但这不会改变我的VS构建。