我正在使用Visual Studio 2019预览版2.1。我有在旧的csproj项目格式一些Azure的引用(ToolsVersion =“15.0”)一个.NET Framework 4.6.1类库C#项目。这个古老的csproj目前构建和工作得很好。我正在尝试迁移到新的项目格式。除了我的参考不是来自NuGet之外,其他一切都进展顺利,它来自GAC:Microsoft.WindowsAzure.ServiceRuntime。但是,我还没有想出如何获得新的项目格式找到组装。例如,这是新的项目文件:
import Component from "Component.js"
emailTwo(){
alert("Component 2 Email");
}
<Component someAction={this.emailTwo}>
实际上,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
我试图删除该版本:
<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>
但这没有帮助。如果我删除它,并尝试从VS用户界面添加引用,我看到有一堆微软的*和系统。*在“框架”(海关总署),但Microsoft.WindowsAzure.ServiceRuntime选项不是一个他们。只是为了确认我开始了ILSpy并选择“打开从GAC ......”果然是有带着一帮不出现在VS用户界面的其他组件一起。
我怎样才能获得VS加载从GAC此引用?
谢谢
答案 0 :(得分:1)
因此我发现this thread on GitHub表示<参考>未发现添加到GAC的程序集是预期的行为:
此行为是设计使然。您可以选择退出,如here所示。这不应该被认为是一种解决方法,而应该是经过深思熟虑和受支持的选择加入,您可以接受在不同机器上具有潜在不同(甚至不正确)的构建行为的后果。
解决方案是执行以下操作:
<PropertyGroup>
<AssemblySearchPaths>$(AssemblySearchPaths);{GAC}</AssemblySearchPaths>
</PropertyGroup>
即使不使用HintPath,我也可以确认这完全解决了我的问题。
但是下一个自然的问题是-如果默认情况下无法解析GAC中添加的程序集,那么Microsoft为什么不将NuGet用于Azure SDK? NuGet中唯一的官方Azure参考是旧的。这是否意味着任何使用新CSPROJ格式的Azure项目都需要将GAC手动添加到AssemblySearchPaths中?
答案 1 :(得分:0)
该"<Reference Include="Microsoft.WindowsAzure.ServiceRuntime, Version=2.7.0.0, …" />"
的格式为Right。这个问题似乎是由于VS无法从正确的位置找到该程序集而导致的。
建议:
如果程序集存在于默认文件夹中:
C:\Program Files\Microsoft SDKs\Azure\.NET SDK\v2.9\ref
”,导航到该文件夹以找到装配。然后转到Reference=>add Reference=>Browser to add it manually
。如果组装件不在机器中:
1。我们可以通过nuget下载程序集。之后,删除我们不需要的其他程序集。
2。我们可以将程序集从存在旧项目的PC复制到当前机器。并浏览以手动添加它。
希望有帮助。任何更新都可以在此处共享。