BuildProvider:是否可以指定要生成的程序集的名称?

发布于 2024-10-19 08:48:11 字数 78 浏览 2 评论 0原文

我创建了一个自定义虚拟路径提供程序和构建提供程序,并且想知道是否可以以某种方式指定生成的程序集的名称,而不是让 asp.net 给出一个名称?

I created a custom virtual path provider and build provider and was wondering if it was possible to somehow specify the name of the assembly that get's generated, rather then letting asp.net come up with a name?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

明明#如月 2024-10-26 08:48:11

要回答我自己的问题,只需很少的体操就可以做到。人们可以从 AssemblyBuilder 获取对 CodeDomProvider 的引用,然后就可以由您决定要做什么。
像这样的东西

 public override void GenerateCode(AssemblyBuilder assemblyBuilder)
        {
            string outputName = VirtualPath.Substring(VirtualPath.LastIndexOf('/') + 1);
            outputName = outputName.Substring(0, outputName.LastIndexOf('.'));

            _compilationContext = (CompilationContext)HttpContext.Current.Items[outputName];

           // var tw = assemblyBuilder.CreateCodeFile(this);
           // tw.Write(_compilationContext.Content);
           // tw.Flush();
           // tw.Close();

            //TODO: inject this 
            var factory = new DirectCompilerServiceFactory();
            var compilerService = factory.CreateCompilerService(assemblyBuilder.CodeDomProvider);

            compilerService.CompileAssembly(_compilationContext);

        }

To answer my own question, it is possible with little gymnastics. One can get reference to CodeDomProvider from AssemblyBuilder and from there on it is up to you what you want to do.
Something like this

 public override void GenerateCode(AssemblyBuilder assemblyBuilder)
        {
            string outputName = VirtualPath.Substring(VirtualPath.LastIndexOf('/') + 1);
            outputName = outputName.Substring(0, outputName.LastIndexOf('.'));

            _compilationContext = (CompilationContext)HttpContext.Current.Items[outputName];

           // var tw = assemblyBuilder.CreateCodeFile(this);
           // tw.Write(_compilationContext.Content);
           // tw.Flush();
           // tw.Close();

            //TODO: inject this 
            var factory = new DirectCompilerServiceFactory();
            var compilerService = factory.CreateCompilerService(assemblyBuilder.CodeDomProvider);

            compilerService.CompileAssembly(_compilationContext);

        }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文