Roslyn bin文件夹在c:\ bin \ roslyn中生成

时间:2019-04-07 07:30:47

标签: c# nuget roslyn

我已经接管了包含许多c#项目的Web解决方案的维护。在编译时,一个项目按预期在其输出目录bin文件夹下创建Roslyn bin文件夹,而另一个项目在C:\ bin \ roslyn中创建Roslyn bin文件夹。我已经在项目文件中搜索了有关为什么发生这种情况的任何线索,但找不到任何引用。在构建日志中,它显示了在其输出目录下创建Roslyn文件夹的项目时,使用绝对目标路径(C:\ project output dir \ bin \ Roslyn)复制文件,而在创建该目录的项目下C:\ bin \ Roslyn,列出的文件只是复制到\ bin \ Roslyn。项目设置应指向输出目录(设置$(OutputDir))。任何指针将不胜感激。

2 个答案:

答案 0 :(得分:0)

我知道调查MSBuild问题的3种方法:

通常,我发现二进制日志(binlog)最有用。通过传递-bl创建一个文件,然后在MSBuild Structured Log Viewer中打开生成的文件。它显示了与构建日志非常相似的数据,但是具有很好的搜索功能,并在树状视图中显示了所发生的情况,极大地帮助了理解。

对于该特定问题,我认为对您来说最有用的是通过运行msbuild -ppdotnet msbuild -pp输出预处理文件。基本上,这将找到所有MSBuild Import语句,并将其替换为导入文件的实际内容。我相信MSBuild始终对自顶向下进行评估。因此,如果定义了property1,然后将其用于评估property2,然后稍后对property1进行更改,则property2的值将保留其从评估时起的值。请记住,执行目标会导致对目标进行评估,因此,只要先运行较低目标,或者下一个定义的属性或项目是全局的,它就可以使用在文件下方定义的属性(不在目标中。

最后,如果其他所有操作均失败,则可以尝试将日志输出设置为最高详细级别(诊断)。请注意,msbuild -v:d是详细的详细信息,您需要msbuild -v:diag来设置诊断详细信息。我不确定这是否实际输出的内容超过binlog中的内容,但我认为我可能绝望了一两次,并且diag输出有所帮助(但我不记得我是否在其中使用了binlog。场合)。无论如何,如果上面的其他两种方法没有帮助,值得尝试。

答案 1 :(得分:0)

由于使用了指针,Icepickle在询问是否存在问题时是正确的,该解决方案可以解决,但根驱动器上只有一个多余的文件夹,因此并不理想。我已经通过解决方案构建(在Diagnostic Verbosity中)对问题进行了排序,并且在将文件复制到根文件夹的所有项目中,我在其项目文件中添加了以下内容。这将指向正确的路径,并且仅在文件不存在的情况下才会复制。

const pool = await orient.getPool();
const session = await pool.acquire();

logger.info('Running query...');
session.command(`SELECT out('Access').out("Contain") FROM Client WHERE myId = 30543`)
  .on('data', (data) => {
    if (data.out_Contain && data.out_Contain.delegate) {
      logger.info('Segment %s contains %o Contact', data['@rid'].toString(), data.out_Contain.delegate.size);
    } else if (data['@rid']) {
      logger.info('Segment %s contains %o Contact', data['@rid'].toString(), data);
    } else {
      logger.info('Data %o', data);
    }
  })
  .on('error', (err) => {
    logger.error(err);
  })
  .on('end', () => {
    console.timeEnd('query');
    logger.info('End of the stream');
    process.emit('SIGINT');
  });

logger.debug('Registering SIGINT');
process.once('SIGINT', async () => {
  await session.close();
  await pool.close();
  await orient.stop();
});