小编And*_*kov的帖子

如何在从 Visual Studio 的项目文件导入中使用 Directory.Build.props 中的属性

我有这样的情况:

我的项目目录中有一个 .proj 文件:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Compile Include="PQExtensionTest.pq">
      <SubType>Code</SubType>
    </Compile>
    <Content Include="PQExtensionTest.query.pq">
      <SubType>Code</SubType>
    </Content>
  </ItemGroup>
  <!-- <Import Project="..\Directory.Build.props" /> -->
  <Import Project="$(aProperty)add.targets" />
</Project>
Run Code Online (Sandbox Code Playgroud)

在解决方案目录(项目目录中的..\)中,我有文件 Directory.Build.props:

<Project DefaultTargets="BuildExtension" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <aProperty>$(MSBuildProjectDirectory)/Subdir/</aProperty>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

在项目目录中,我有子目录“Subdir”,其中有文件 add.targets,其中包含我需要的所有目标(不显示它包含在此处,因为它与问题无关)。

所以以上都有这个文件夹结构:

Solution directory
  Directory.Build.props
  Project Directory
    Project.mproj
    Subdir
      add.targets
Run Code Online (Sandbox Code Playgroud)

准备好上述所有内容后,我预计 aProperty 将在导入之前启动,并且 add.targets 的导入将顺利进行。但我收到错误消息,指出未找到导入的项目,并且我在错误消息中看到 MSBuild 尝试从项目目录导入,而不是从子目录 Subdir 导入。

如果我取消注释这一行:

<Import Project="..\Directory.Build.props" />
Run Code Online (Sandbox Code Playgroud)

一切正常。

对我来说,这种行为的唯一合理解释是 aProperty 在导入时为空,因为显式导入发生在隐式导入之前。

在 Visual Studio 中工作时,有什么方法可以强制 MSBuild 在任何其他导入之前隐式导入 Directory.Build.props ?

msbuild visual-studio

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

如何使扩展适应Visual Studio 2019?

我读到适应VS 2019的扩展非常容易-https: //devblogs.microsoft.com/visualstudio/visual-studio-extensions-and-version-ranges-demystified/#

但是,如果我从帖子中执行所有操作,则会出错:

无法安装,因为没有以下链接:Microsoft.VisualStudio.Component.CoreEditor。

该帖子的作者在修改其扩展名时显示的行完全相同:

<Prerequisite Id="Microsoft.VisualStudio.Component.CoreEditor" Version="[15.0,)" />
Run Code Online (Sandbox Code Playgroud)

因此,看来这个先决条件对他来说不是问题。

我更新的extension.vsixmanifest是:

<?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011">
  <Metadata>
    <Identity Id="PowerQuerySDK.Microsoft.30831070-f420-4649-a031-6f679996b182" Version="1.0.0.20" Language="en-US" Publisher="Microsoft" />
    <DisplayName>Power Query SDK</DisplayName>
    <Description xml:space="preserve">A Power Query language service for Visual Studio</Description>
    <License>Microsoft Power Query SDK - Pre-Release or Evaluation Use Terms.rtf</License>
    <Icon>dataconnector_128.png</Icon>
    <PreviewImage>EATIcon.ico</PreviewImage>
  </Metadata>
  <Installation>
    <InstallationTarget Id="Microsoft.VisualStudio.Community" Version="[14.0,17.0)" />
    <InstallationTarget Version="[14.0,17.0)" Id="Microsoft.VisualStudio.Pro" />
    <InstallationTarget Version="[14.0,17.0)" Id="Microsoft.VisualStudio.Enterprise" />
  </Installation>
  <Dependencies>
    <Dependency Id="Microsoft.Framework.NDP" DisplayName="Microsoft .NET Framework" Version="[4.5,)" />
  </Dependencies>
  <Assets>
    <Asset Type="Microsoft.VisualStudio.ProjectTemplate" Path="ProjectTemplates" />
    <Asset …
Run Code Online (Sandbox Code Playgroud)

visual-studio-extensions

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

使用 JavaScript 在 Power Query 中使用正则表达式

我需要 Regexp,而 M / Power Query 没有对其的本机支持。我发现了围绕同一个优秀的 Web.Page & JavaScript 想法的几种解决方案变体 - BiccauntantHugoberry

由于 JavaScript 的限制,我不得不采用它们(生成的代码如下)。

主要问题是 JavaScript 对字符串变量有自己的限制 - 不可能在其中使用“\”。

我的变体解决了这个问题,但我对 JS 并不专业,所以主要问题是 - 我怀疑“\”问题并不是唯一的问题。

所以我的问题是 - 在使用 Regexp 时是否有人看到 PQ 和 JavaScript“合作”的其他问题?关于字符串的其他陷阱,或者其他什么?

我知道 Regexp 有它自己的转义规则(这不仅是 JavaScript 的需求,而且是 Regexp 本身),因此 Regex 本身的转义超出了问题的范围。即,在将正则表达式作为函数参数传递之前,应对其进行正确转义。换句话说,假设如果用户想要使用带有“\”的正则表达式,他必须使用“\\”代替,我的函数会将其转换为“\\\\”,它将传递给JavaScript 作为正则表达式。

对于 PQ 用户 - 事实证明,该解决方案的性能至少对于数百行来说相当不错。但请不要忘记,无法在 Power BI 服务中使用该功能,这仅适用于 PowerBI Desktop 和 Excel。

代码:

(text as nullable text, pattern as nullable text) as logical =>
    let 
        l = List.Transform({text, pattern}, each Text.Replace(_, "\", "\\")), …
Run Code Online (Sandbox Code Playgroud)

javascript powerquery powerbi

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

Visual Studio 中没有目标的项目文件的 Directory.Build.targets

如果我的项目文件没有任何目标,并且我在适当的目录中有 Directory.Build.targets 文件(具有适当的目标),则 Visual Studio 无法构建项目。VS的版本是2019RC,但我不认为这是特定版本的问题

这是预期的行为吗?为什么?

更新 - 项目的完整结构。一般来说,这是从“Power Query SDK”的“数据连接器项目”模板修改的项目 - https://marketplace.visualstudio.com/items?itemName=Dakahn.PowerQuerySDK

项目名称是PQExtensionTest。它具有典型的文件夹结构 - PQExtensionTest 解决方案目录、内部 PQExtensionTest.sln 文件和包含 PQExtensionTest.mroj 和 Directory.build.targets 文件的 PQExtensionTest 项目目录。

PQExtensionTest.sln 文件:

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.28010.2046
MinimumVisualStudioVersion = 10.0.40219.1
Project("{4DF76451-A46A-4C0B-BE03-459FAAFA07E6}") = "PQExtensionTest", "PQExtensionTest\PQExtensionTest.mproj", "{6DEC2A2E-C380-4701-AA12-5052284223E4}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|x86 = Debug|x86
        Release|x86 = Release|x86
    EndGlobalSection
    GlobalSection(ProjectConfigurationPlatforms) = postSolution
        {6DEC2A2E-C380-4701-AA12-5052284223E4}.Debug|x86.ActiveCfg = Debug|x86
        {6DEC2A2E-C380-4701-AA12-5052284223E4}.Debug|x86.Build.0 = Debug|x86
        {6DEC2A2E-C380-4701-AA12-5052284223E4}.Release|x86.ActiveCfg = Release|x86
        {6DEC2A2E-C380-4701-AA12-5052284223E4}.Release|x86.Build.0 = Release|x86
    EndGlobalSection
    GlobalSection(SolutionProperties) …
Run Code Online (Sandbox Code Playgroud)

msbuild visual-studio

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