【发布时间】:2013-06-28 22:25:40
【问题描述】:
我有一个 Azure 云服务,有一个 Web 角色和一个工作人员。
当我从命令行创建包时,我遇到了辅助角色的问题。 我的 worker 是一个带有 App.Config 的简单类库,并且使用 SlowCheetah 2.5.5 进行转换。
如果我右键单击我的 Azure 云服务并打包它一切都很好,最终的 app.config 将是由 SlowCheetah 转换的,如下所示
22>Target "CopyWorkerRoleFiles" in file "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\Windows Azure Tools\2.0\Microsoft.WindowsAzure.targets" from project "C:\dev\My\WindowsAzure\WindowsAzure.ccproj" (target "CopyRoleFiles" depends on it):
22> WorkerFiles=C:\dev\My\MyWorker\bin\QA\MyWorker.dll.config -> MyWorker.dll.config
22> WorkerFiles=C:\dev\My\MyWorker\obj\QA\MyWorker.dll -> MyWorker.dll
22> WorkerFiles=C:\dev\My\MyWorker\obj\QA\MyWorker.pdb -> MyWorker.pdb
22> WorkerFiles=C:\dev\My\MyWorker\obj\QA\SlowCheetah\App.config -> MyWorker.dll.config
从命令行,现在,当我创建包时,不再使用 SlowCheetah 并且我没有转换
CopyWorkerRoleFiles:
WorkerFiles=C:\CI\My\MyWorker\bin\QA\MyWorker.dll.config -> MyWorker.dll.config
WorkerFiles=C:\CI\My\MyWorker\bin\QA\App.config -> App.config
WorkerFiles=C:\CI\My\MyWorker\obj\QA\MyWorker.dll -> MyWorker.dll
WorkerFiles=C:\CI\My\MyWorker\obj\QA\MyWorker.pdb -> MyWorker.pdb
我怎样才能找到我缺少的在 VS 和命令行之间具有相同行为的内容?
编辑:
我创建了一个小型云项目,其中包含一个工作角色和 slowcheetah,并且在这个新项目上一切正常... 问题出在我的项目中,我将我的解决方案中的 csproj 和 ccproj 与测试解决方案中的 csproj 和 ccproj 进行了双重检查,我看不出有什么大的区别......
编辑 2:
这是我的 msbuild 命令来编译我的项目
C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe .\MyProject.sln
/p:Configuration=QA /p:TargetProfile=CloudQA /target:Publish /nr:false
编辑 3: 我终于把问题缩小到这个了,我已经将 Microsoft.Bcl 更新到 1.1.3,我编译它,转换工作正常!
我已经将Microsoft.Net.Http更新到2.2.13,我编译了,转换失败。
nuget 包将此添加到我的 csproj...
<Reference Include="System.Net.Http" />
+ <Reference Include="System.Net.Http.Extensions">
+ <HintPath>..\packages\Microsoft.Net.Http.2.2.13\lib\net45\System.Net.Http.Extensions.dll</HintPath>
+ </Reference>
<Reference Include="System.Net.Http.Formatting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.4.0.30506.0\lib\net40\System.Net.Http.Formatting.dll</HintPath>
</Reference>
+ <Reference Include="System.Net.Http.Primitives">
+ <HintPath>..\packages\Microsoft.Net.Http.2.2.13\lib\net45\System.Net.Http.Primitives.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.Http.WebRequest" />
如果我删除所有引用,转换将再次起作用...
我添加了这个引用并且转换仍然有效:
+ <Reference Include="System.Net.Http.WebRequest" />
我一一添加了这个引用
+ <Reference Include="System.Net.Http.Extensions">
+ <HintPath>..\packages\Microsoft.Net.Http.2.2.13\lib\net45\System.Net.Http.Extensions.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Net.Http.Primitives">
+ <HintPath>..\packages\Microsoft.Net.Http.2.2.13\lib\net45\System.Net.Http.Primitives.dll</HintPath>
+ </Reference>
而项目改造又失败了。
编辑 4:
关于这个问题的更多信息,Micorosoft.Net.HttpClient Nuget Packages 在 System.Net.Http.Extensions 和 System.Net.Http.Primitives 时也在修改 app.config。它将以下内容添加到 app.config
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Extensions" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.2.13.0" newVersion="2.2.13.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Primitives" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.2.13.0" newVersion="4.2.13.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
这是引用这些程序集的构建输出
17>_CopyAppConfigFile:
17> Copying file from "obj\Debug\Tests.MyProject.Data.csproj.App.config" to "bin\Debug\Tests.MyProject.Data.dll.config".
17>CopyFilesToOutputDirectory:
17> Copying file from "obj\Debug\Tests.MyProject.Data.dll" to "bin\Debug\Tests.MyProject.Data.dll".
17> Tests.MyProject.Data -> C:\dev\MyProject\Tests\Tests.MyProject.Data\bin\Debug\Tests.MyProject.Data.dll
17> Copying file from "obj\Debug\Tests.MyProject.Data.pdb" to "bin\Debug\Tests.MyProject.Data.pdb".
17>ScReplaceAppConfigItem:
17> Updated app.config to point to transformed file
17> AppConfigWithTargetPath: obj\Debug\Tests.MyProject.Data.csproj.App.config
17> AppConfigWithTargetPath.TargetPath: Tests.MyProject.Data.dll.config
删除微软引用
17>_CopyAppConfigFile:
17> Copying file from "App.config" to "bin\Debug\Tests.MyProject.Data.dll.config".
17>CopyFilesToOutputDirectory:
17> Copying file from "obj\Debug\Tests.MyProject.Data.dll" to "bin\Debug\Tests.MyProject.Data.dll".
17> Tests.MyProject.Data -> C:\dev\MyProject\Tests\Tests.MyProject.Data\bin\Debug\Tests.MyProject.Data.dll
17> Copying file from "obj\Debug\Tests.MyProject.Data.pdb" to "bin\Debug\Tests.MyProject.Data.pdb".
17>ScReplaceAppConfigItem:
17> Copying file from "bin\Debug\Tests.MyProject.Data.dll.config" to "obj\Debug\SlowCheetah\App.config".
17> Updated app.config to point to transformed file
17> AppConfigWithTargetPath: obj\Debug\SlowCheetah\App.config
17> AppConfigWithTargetPath.TargetPath: Tests.MyProject.Data.dll.config
【问题讨论】:
-
你能提供你正在执行的命令吗?
-
你好 Sayed,仅供参考,我已经为我的所有项目重新创建了一个解决方案,并且它正在使用相同的构建命令...
-
你知道我应该从哪里开始调试这个问题吗?谢谢
-
从命令行构建并比较构建日志以查看发生了什么。
-
@SayedIbrahimHashimi 我刚刚又遇到了这个问题......昨天一切正常,我已经更新了 Microsoft.Bcl 和 Microsoft.Net.Http 的 nuget 包。我有同样的错误。您知道可能出现的问题吗?
标签: azure visual-studio-2012 .net-4.5 slowcheetah