自定义条件编译符号

时间:2018-10-19 22:23:28

标签: c# visual-studio xamarin conditional-compilation

我目前正在努力使用自定义配置。 我的解决方案有一个.NET标准库和另外两个使用该库的项目(一个用于Windows,一个用于Android)。

我想做的就是为库提供编译器常量WINDOWS和MOBILE。

那是我几次尝试的方式:

  1. 创建两个新的配置WindowsDE和MobileDE,从“调试”配置复制设置并创建新的项目配置。在一些尝试下,我还删除了默认的Debug配置,但这没有帮助

  2. 库的属性->构建,选择WindowsDE并将WINDOWS放入条件编译符号字段中,然后选择MobileDE并将ANDROID放入其中。

我正在通过调用库中的方法对其进行测试:

#if WINDOWS
        System.Diagnostics.Debug.WriteLine("Windows");
#endif

#if ANDROID
        System.Diagnostics.Debug.WriteLine("Android");
#endif

但这根本不起作用。也只是使用

System.Diagnostics.Debug.WriteLine("anything");

没有任何#if不会打印,并且在某些尝试下我什至无法调试该库。

希望对此有所帮助

1 个答案:

答案 0 :(得分:2)

您可以在项目属性中定义条件编译常量

JSFIDDLE

const later = async (delay, value) => {
    return new Promise(resolve => {
        setTimeout(() => resolve(value), delay);
    });
};

function* rangePromise() {
    for (let i = 2; i < 10; i++) {
        let nextValue = yield later(100, i);
        yield nextValue;
    }
}

const forEachAsyncAdapter = async (iterator, ...callbacks) => {
    try {
        let next = iterator.next();
        while (!next.done) {
            while (!next.done && next.value && next.value.then) {
                next = iterator.next(await next.value);
            }
            if (!next.done) {
                await callbacks.reduce(
                    async (nextValue, callback) => {
                        nextValue = await callback(await nextValue);
                        return nextValue;
                    },
                    Promise.resolve(next.value)
                );
                next = iterator.next();
            }
        }
    } finally {
        if (typeof iterator.return === 'function') {
            iterator.return();
        }
    }
};


forEachAsyncAdapter(
    rangePromise(),
    async i => { console.log(i); return Array(i).join('a'); },
    async s => { console.log(s); return s.toUpperCase(); },
    async s => { console.log(s); }
);

您可以输入多个用分号分隔的符号。请勿将它们设置为#if WINDOWS System.Diagnostics.Debug.WriteLine("Windows"); // NOT printed! #endif #if ANDROID System.Diagnostics.Debug.WriteLine("Android"); // Printed! #endif true。列出的是false。缺少的自动为true

如果一个都不打印,则解决方案可能无法编译,而您正在运行旧代码。尝试重建解决方案。