参考新的csproj格式GAC组件?

问题描述 投票:3回答:2

我使用Visual Studio 2019预览2.1。我有在旧的csproj项目格式一些Azure中引用一个.NET Framework 4.6.1类库C#项目(ToolsVersion =“15.0”)。这个古老的csproj目前构建和工作得很好。我试图迁移到新的项目格式。除了事实,我有一个参考它并非来自的NuGet一切都很顺利 - 它来自GAC:Microsoft.WindowsAzure.ServiceRuntime。但是,我还没有想出如何获得新的项目格式找到组装。例如这里是新的项目文件:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
    <TargetFramework>net461</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <None Include="app.config" />
  </ItemGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Azure.KeyVault" Version="2.3.2" />
    <PackageReference Include="Microsoft.Azure.KeyVault.Core" Version="1.0.0" />
    <PackageReference Include="Microsoft.Azure.KeyVault.WebKey" Version="2.0.7" />
    <PackageReference Include="Microsoft.IdentityModel.Clients.ActiveDirectory" Version="3.19.1" />
    <PackageReference Include="Microsoft.Rest.ClientRuntime" Version="2.3.8" />
    <PackageReference Include="Microsoft.Rest.ClientRuntime.Azure" Version="3.3.7" />
    <PackageReference Include="Microsoft.WindowsAzure.ConfigurationManager" Version="3.2.3" />
    <PackageReference Include="Newtonsoft.Json" Version="10.0.2" />
    <PackageReference Include="WindowsAzure.Storage" Version="9.0.0" />
  </ItemGroup>
  <ItemGroup>
    <Reference Include="Microsoft.WindowsAzure.ServiceRuntime, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Runtime.Caching" />
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Net.Http" />
    <Reference Include="System.Xml" />
  </ItemGroup>
</Project>

事实上,Microsoft.WindowsAzure.ServiceRuntime引用是从旧格式的确切行。当VS加载此它产生以下警告:

警告MSB3245无法解析此引用。无法找到程序集 “Microsoft.WindowsAzure.ServiceRuntime,版本= 2.7.0.0,文化=中性公钥= 31bf3856ad364e35,ProcessorArchitecture用于= MSIL”。检查以确保存在磁盘上的装配。如果您的代码需要此引用,则可能出现编译错误。 MyProject的C:\ Program Files文件(x86)的\微软的Visual Studio \ 2019 \预览\的MSBuild \电流\ BIN \ Microsoft.Common.CurrentVersion.targets 2114

我试图删除版本:

<Reference Include="Microsoft.WindowsAzure.ServiceRuntime" />

但是,这并没有帮助。如果我删除它,并尝试从VS用户界面添加引用,我看到有一堆微软的*和系统。*在“框架”(海关总署)选项,但Microsoft.WindowsAzure.ServiceRuntime不是一个他们。只是为了确认我开始了ILSpy并选择“打开从GAC ......”果然是有带着一帮不出现在VS用户界面的其他组件一起。

我怎样才能得到VS加载从GAC这个参考?

谢谢

visual-studio msbuild visual-studio-2019
2个回答
1
投票

所以我发现this thread on GitHub这表明 未发现添加到GAC组件是预期的行为:

此行为是由设计。您可以在如图所示here选择回来。这不应该被认为是一种解决方法,而是故意和支持的选择,在这里您接受有可能不同(甚至是不正确的)的后果在不同机器上建立行为。

解决的办法是做到以下几点:

<PropertyGroup>
  <AssemblySearchPaths>$(AssemblySearchPaths);{GAC}</AssemblySearchPaths>
</PropertyGroup>

我可以证实这一点完全可以解决我的问题,即使不使用HintPath。

但是,自然接下来的问题是 - 如果在GAC解决添加组件默认不会工作,为什么不利用微软为的NuGet在Azure SDK?中的NuGet唯一的官方Azure的参考是旧的。这是否意味着使用新的csproj格式将需要手动添加到GAC任何AssemblySearchPaths Azure项目?


0
投票

"<Reference Include="Microsoft.WindowsAzure.ServiceRuntime, Version=2.7.0.0, …" />"的格式是正确的。而这个问题似乎从VS导致找不到右的立场,即组装。建议:

如果存在默认文件夹集:

  1. 手动添加:在VS2019预览,它的默认位置是“C:\Program Files\Microsoft SDKs\Azure\.NET SDK\v2.9\ref”,定位到该文件夹​​,找到组装。然后去Reference=>add Reference=>Browser to add it manually
  2. 另外,我们可以删除和添加来自VS用户界面的参考,但大会应在代替“框架”扩展'。由于装配似乎没有在GAC定位,我还没有发现它在GAC。 enter image description here

如果大会没有在机器上存在:

1.我们可以通过nuget下载组件。在此之后,删除我们不需要其他组件。

2.我们可以从那里老项目的存在是为了当前机器的PC上复制的组件。并浏览到manully添加。

希望能帮助到你。任何更新随时在这里分享。

© www.soinside.com 2019 - 2024. All rights reserved.