小编jon*_*bot的帖子

roslyn编译器没有使用msbuild复制到AspnetCompileMerge文件夹

我有一个.NET MVC项目,我正在尝试使用Jenkins进行部署.

我一直让Jenkins运行msbuild,然后使用RoboCopy复制生成的文件.我想切换到只使用发布配置文件.发布配置文件在我的本地计算机上使用Visual Studio正常工作,但在Jenkins主机上它使用msbuild失败.

它给出的错误是

ASPNETCOMPILER:错误ASPRUNTIME:找不到路径'C:\ Program Files(x86)\ Jenkins\jobs\myProject\workspace\myProject\_ obj\Debug\AspnetCompileMerge\Source\bin\roslyn\csc.exe'的一部分.[C:\ Program Files(x86)\ Jenkins\jobs\myProject\workspace\myProject\calendar.csproj]

我正在使用Microsoft.Net.Compilers nuget包来引入C#编译器,因为项目中的一些协作者仍在Visual Studio 2013上,但我们在项目中使用了C#6语言功能.

事实上,在添加发布标志之前,项目在jenkins上使用MSBuild构建得很好.它只是在添加/p:DeployOnBuild=true;PublishProfile=MyProfile它开始失败的设置之后......但是使用Visual Studio,发布步骤工作得很好,而且roslyn编译器甚至被复制到本地机器上的obj\Debug\AspnetCompileMerge\Source\bin \文件夹中.是什么赋予了?

老实说,既然msbuild14在Jenkins服务器上可用,它可能甚至不需要 roslyn csc.exe文件.有没有办法让msbuild忽略它?

我的发布档案

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <publishUrl>\\myserver\someshare\mysite</publishUrl>
    <DeleteExistingFiles>True</DeleteExistingFiles>
    <PrecompileBeforePublish>True</PrecompileBeforePublish>
    <EnableUpdateable>True</EnableUpdateable>
    <DebugSymbols>False</DebugSymbols>
    <WDPMergeOption>DonotMerge</WDPMergeOption>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

我到目前为止所做的一切

我试过更新编译器包.

手动复制编译器

我在.csproj文件中添加了步骤,将丢失的编译器文件强制复制到AspnetCompileMerge目录(我已经将它们复制到bin\roslyn目录以解决 另一个问题)

<Target Name="CopyRoslynFiles" AfterTargets="BeforeBuild">
  <ItemGroup>
    <RoslynFiles Include="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*" Exclude="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*.sys" />
  </ItemGroup>
  <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
  <MakeDir Directories="$(WebProjectOutputDir)\obj\$(Configuration)\AspnetCompileMerge\Source\bin\roslyn" />
  <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" /> …
Run Code Online (Sandbox Code Playgroud)

c# msbuild visual-studio jenkins

12
推荐指数
2
解决办法
4174
查看次数

连接两个 gatsby 节点

因此,我使用gatsby-mdx插件从 MDX 文件创建站点。我想在 SitePage 对象和 Mdx 对象之间创建一个关联,以便我可以对 SitePage 边缘执行一个 graphQL 查询以构建站点导航。

我的大部分代码都在 TypeScript 中,所以如果您想知道 WTF 是什么类型的注释,请忽略任何类型注释。

我尝试过的事情

使用字段

我的第一个想法是使用onCreateNodeAPI,获取 MDX 节点,然后使用createNodeField操作将其添加到 SitePage 。这一切的伟大工程,但盖茨比,MDX插件增加了大量的其他信息,以它们的节点以后使用setFieldsOnGraphQLNodeTypeAPI(发生onCreateNodeAPI)。我希望这些字段(例如 frontmatter 和 tableOfContents)在以后的 graphql 查询中可用,但它们没有使用这种方法。

实现我自己的 setFieldsOnGraphQLNodeType

我想我可以像 gatsby-mdx 扩展 Mdx 节点一样扩展 SitePage 对象。

我在这里遇到的关键问题是我不知道如何创建 Mdx GraphQL 节点类型。

export const setFieldsOnGraphQLNodeType = ({type, actions, getNodes}: any, pluginOptions: any) => {
    if (type.name === "SitePage") {
        const {createParentChildLink} = actions
        return new Promise((resolve) => …
Run Code Online (Sandbox Code Playgroud)

javascript graphql graphql-js gatsby

7
推荐指数
1
解决办法
1831
查看次数

Geb新款无头镀铬

我正试图让我的项目使用Geb在无头模式下运行Chrome的beta频道.

我可以使用Geb Gradle示例项目重现该问题.

在GebConfig.groovy中,我有这个块来定义chrome:

environments {

    // run via “./gradlew chromeTest”
    // See: http://code.google.com/p/selenium/wiki/ChromeDriver
    chrome {
        driver = {
            ChromeOptions options = new ChromeOptions()
            DesiredCapabilities capabilities = DesiredCapabilities.chrome()

            String chromiumPath = "/usr/bin/chromium-browser"
            String macChromePath = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
            String macCanaryChrome = "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"

            def chromiumBinary = new File(chromiumPath)
            def isAgent = chromiumBinary.exists()
            def macChromeBinary = new File(macChromePath)
            if (isAgent) {
                options.setBinary(chromiumBinary) //Set binary using file to avoid NoClassDefFound error on mac
            } else if (macChromeBinary.exists()) …
Run Code Online (Sandbox Code Playgroud)

groovy selenium google-chrome headless-browser geb

6
推荐指数
1
解决办法
2388
查看次数

使用服务和插件依赖性测试自定义Grails Taglib

我有一个自定义taglib需要调用服务方法,而该方法又使用Wslite插件来发送和接收SOAP消息.taglib看起来像这样.

class myTagLib {
    def myService
    def thisTag = {
        def parametersFromService = myService.method("argument")
        out << render(template:'/myFolder/myView',
        model:parametersFromService)
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试为这个taglib构建一个测试.我的测试是这样的:

void testThisTag() {
    def appliedTagLib = applyTemplate('<thisTag attr="value" />')
    def parametersFromService = myService.method("argument")
    def renderedTemplate = render(template:'/myFolder/myView',
        model:parametersFromService)
    assertEquals appliedTagLib, renderedTemplate
}
Run Code Online (Sandbox Code Playgroud)

我开始把它写成单元测试.我尝试了简单的MockFor(MyService)注释,以及以更精细的方式模拟它们,但是myService当taglib试图调用它时,对象总是为null.

鉴于此,我决定最好将其作为集成测试; 这将让我访问插件和服务,没有问题.

但是,只有在测试类扩展GroovyPagesTestCase时,applyTemplate方法才有效.如果你这样做,渲染方法不起作用,至少不在集成测试中.我知道ApplyTemplate在和渲染对方一起工作,在单元测试的标签库,因为我测试过的其他标签库这样.

我好像在一块岩石和一块坚硬的地方之间.要访问他们调用的服务,插件和SOAP服务,我需要进行集成测试.要使用applyTemplate()方法,我需要扩展GroovyPagesTestCase,但这会破坏render方法.我已经尝试添加import grails.test.GroovyPagesTestCase到我的测试类,然后从中调用applyTemplate方法,但这会导致缺少方法异常.

思考?

Grails版本是2.0.1,但如果有帮助(我们的网站处于转换状态),我可以升级到2.2.1.

---附录----- elias建议我可以注入一个grails.gsp.PageRenderer实例来获取一个有效的渲染方法.我试过构建一个:

import org.codehaus.groovy.grails.web.pages.GroovyPagesTemplateEngine
import grails.gsp.PageRenderer
Run Code Online (Sandbox Code Playgroud)

...

def pageRenderer
Run Code Online (Sandbox Code Playgroud)

...

void setUp() {
    context = …
Run Code Online (Sandbox Code Playgroud)

testing grails plugins integration-testing unit-testing

4
推荐指数
1
解决办法
2868
查看次数

如何将TIFF ImageReader添加到Grails中注册的人

我正在尝试创建一个Grails应用程序,它可以显示TIFF文件和其他图像的预览.

背景

这些图像是从SOAP服务构造的,它为我提供了图像的字节.在一个服务方法中,我取byte [],从中构造一个ByteArrayInputStream,然后从中创建一个BufferedImage.

def inputStream = new ByteArrayInputStream(bytes)
BufferedImage originalImage = ImageIO.read(inputStream)
ImageIO.write(originalImage, 'png', response.outputStream)
Run Code Online (Sandbox Code Playgroud)

对于JPG,我可以轻松地将图像作为img标记的src流式传输到浏览器.但是,我需要将图像转换为其他格式(最好是JPG或PNG),以使它们成为标记的src.

问题

我知道我需要JAI才能读取TIFF文件.jai_core.jar,jai_codec.jar文件在我的classpath中.事实上,因为我在Mac OSX上,它们是自动安装的.但是,当我运行grails应用程序并尝试从SOAP服务接收的字节构造TIFF图像时,我收到此错误:

| Error 2013-06-18 15:23:38,135 [http-bio-8080-exec-10] ERROR errors.GrailsExceptionResolver  - IllegalArgumentException occurred when processing request: [GET] /BDMPlugin/BDMPlugin/displayImageFromRef - parameters:
pageRef: 28:22072FBCA0A8889D9C041D76A588BCF4DCB40376A23B5FD5C301378C8E66EB9F4933A5DFCA46365F927D9E91B337B6E1E980FB4406644801
type: TIFF
im == null!. Stacktrace follows:
Message: im == null!
    Line | Method
->> 1457 | write                in javax.imageio.ImageIO
- - - - - - - - - - - - - - - - - - - …
Run Code Online (Sandbox Code Playgroud)

grails jai javax.imageio

4
推荐指数
1
解决办法
1万
查看次数

BuildConfig.groovy Grails 2.2.3中的自定义插件传递依赖性解析

tl;博士版

我自定义grails插件的依赖关系没有被我安装插件的项目继承和解决.

  • 将最新版本的发布插件安装到您的插件中(修复了jar依赖项的问题)
  • 清除BuildConfig.groovy文件中可能存在的对插件的任何引用(修复了插件依赖性的问题)
  • grails maven-install 使插件在mavenLocal()源中可用

长版

所以,我一直在尝试创建一个自定义grails插件供我大学内部使用.

我真的很喜欢它,如果将插件放入BuildConfig.groovy文件的插件关闭会自动安装不仅仅是插件,而是在BuildConfig.groovy文件中为插件定义的所有依赖项(或者,在打包后,它的依赖项.groovy文件).

查看说明,我已经在存储库闭包中为我的项目设置了BuildConfig.groovy文件:

flatDir name:'my-plugin', dirs:'/Users/me/workspace-ggts/myplugin'
Run Code Online (Sandbox Code Playgroud)

然后将其添加到插件闭包中:

compile(":grails-my-plugin:0.1")
Run Code Online (Sandbox Code Playgroud)

这确实正确安装了插件,但它没有解决任何插件的依赖项或所需的插件.这是插件的BuildConfig.groovy文件中的三个主要闭包:

repositories {
    grailsCentral()
    mavenCentral()
    mavenRepo "http://www.mygrid.org.uk/maven/repository"
    def jbossResolver = new org.apache.ivy.plugins.resolver.URLResolver()
    jbossResolver.addArtifactPattern("https://repository.jboss.org/nexus/content/groups/public-jboss/com/sun/media/[module]/[revision]/[artifact]-[revision].[ext]")
    jbossResolver.addArtifactPattern("https://repository.jboss.org/nexus/content/groups/public-jboss/javax/media/[module]/[revision]/[artifact]-[revision].[ext]")
    resolver jbossResolver
}
dependencies {

    compile (
        [group:'javax.media', name:'jai-core', version:'1.1.3'],
        [group:'com.sun.media', name:'jai-codec', version:'1.1.3']
        )
    compile "net.java.dev.jai-imageio:jai-imageio-core-standalone:1.2-pre-dr-b04-2013-04-23" //this jar comes from the mygrid mavenRepo
}

plugins {
    build(":tomcat:$grailsVersion",
          ":release:1.0.0") {
        export = false
    }
    compile ":spring-security-core:1.2.7.3"
    compile ":wslite:0.7.2.0"
}
Run Code Online (Sandbox Code Playgroud)

如果我使用插件运行grails run-app,它会解决所有这些依赖关系.只有当插件安装到项目时,自动依赖项解析才会失败.

我已经尝试使插件成为maven工件,并将其复制到我的本地存储库.在这些情况下,我flatDirrepositories …

grails dependencies ivy grails-plugin grails-2.2

3
推荐指数
1
解决办法
3840
查看次数

常见域列的Mixin常见的beforeInsert和beforeUpdate方法

我们公司使用的大多数域对象都有一些共同的属性.它们代表创建对象的用户,最后更新对象的用户以及用于执行此操作的程序.

在利益DRY荷兰国际集团我的领域类,我想找到一些方法来添加相同beforeInsert和更新前的逻辑具有这些列的所有领域类不与那些不干扰.

我是怎么想这样做的,就是使用一个带有自己的beforeInsert和beforeUpdate方法的Mixin.我知道你可以在域类上使用Mixins.

package my.com

import my.com.DomainMixin

@Mixin(DomainMixin)
class MyClass {
    String foo
    String creator
    String updater

    static constraints = {
        creator nullable:false
        updater nullable:false
    }
}


package my.com
class DomainMixin {
    def beforeInsert() {
        this.creator = 'foo'
        this.updater = 'foo'
    }

    def beforeUpdate() {
        this.updater = 'bar'
    }
}
Run Code Online (Sandbox Code Playgroud)

单元测试表明,当以这种方式实现时,beforeInsert方法实际上没有被触发.

旁注:我也知道可以使用metaClass 在BootStrap.groovy文件中添加方法,但我的好奇心已经变得更好了,我真的想看看mixin是否有效.请随意告诉我,这是更好的方法,我不应该混淆男人不应该的地方.

grails groovy grails-orm mixins

1
推荐指数
1
解决办法
3848
查看次数