关于上一个问题,我试图创建一个批处理文件,作为部分必须删除并添加对XML*.csproj文件的引用.我已经看过这个,这个,这个和这个以前的问题,但作为一个PowerShell的n00b我无法得到它的工作(到目前为止).
任何人都可以帮助我以下?我想删除VS2010 csproj文件(XML)中的两个特定引用并添加新引用.
我打开了csproj,可以在以下位置找到引用
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- ... -->
<!-- Omitted for brevity -->
<!-- ... -->
<ItemGroup Condition="'$(BuildingInsideVisualStudio)' == 'true'">
<AvailableItemName Include="Effect" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SomeDirectory\SomeProjectFile.csproj">
<Project>{AAB784E4-F8C6-4324-ABC0-6E9E0F73E575}</Project>
<Name>SomeProject</Name>
</ProjectReference>
<ProjectReference Include="..\AnotherDirectory\AnotherProjectFile.csproj">
<Project>{B0AA6A94-6784-4221-81F0-244A68C374C0}</Project>
<Name>AnotherProject</Name>
</ProjectReference>
</ItemGroup>
<!-- ... -->
<!-- Omitted for brevity -->
<!-- ... -->
</Project>
Run Code Online (Sandbox Code Playgroud)
基本上我想:
作为一个非常简单的示例,我尝试了以下powershell脚本来删除所有ProjectReference节点.我将路径传递给csproj作为参数.我收到了错误Cannot validate the argument 'XML'. The Argument is null or empty …
这个问题是二合一的,但两者都与同一个问题有关.
我们是由10个开发人员组成的团队,一些开发人员更喜欢使用IIS的完整实例,而其他开发人员更喜欢使用IIS-Express.使用其中任何一个都是值得的,例如,IIS最类似于生产,而IIS-Express允许编辑并继续调试.
除了10个开发人员工作团队,我们正在使用源代码控制,我们有一个分支结构.每个分支可能具有不同的web.config/app.config设置,例如数据库连接字符串.开发人员可能一次在多个分支上工作,因此我们通常每个分支都有一个数据库,我们正在查看具有本地数据库的开发人员,但无论采用何种方法,命名冲突仍然是一个问题(即开发人员可能有2个本地数据库,每个分支一个).
第一个问题是带有csproj文件的问题,特别是Web服务器设置.如果一个开发人员签入使用IIS-Express的csproj文件,而另一个开发人员执行Get Latest,则会覆盖他们的配置,浪费时间并造成挫败感.
当然,最简单的解决方案是强制每个人使用一个工具,一个配置,但我宁愿不这样做,特别是对于与结果输出无关的东西(编译代码).
第二个问题是配置文件,配置文件存储在源代码控制中(就像任何其他文件一样),因此当我们进行分支合并时,这些文件必须在之后手动更新.我知道有配置文件的调试和发布转换,我们可以在两者中都有不同的连接字符串,但这并不能解决两个开发人员可能在同一分支上工作但具有不同连接字符串的问题.
显而易见的解决方案是每个人总是拥有完全相同的设置,但是一些开发人员可能想要使用LocalDB实例,其他人可能想要使用SQL-Express,而登台服务器使用完整的SQLServer实例.同样,这是另一个与最终结果无关的设置.
在管理团队成员之间的配置以及分支/合并之间,我没有看到任何解决我的特定问题的方法.
我想创建一个nuget包,使用我创建的自定义MSBuild任务向我的csproj添加BeforeBuild步骤.理想情况下,我想:
所以安装完成后我的csproj应该包含以下内容:
<Target Name="MyCustomBeforeBuildTarget" Condition="SomeCondition">
<MyCustomTask />
</Target>
<Target Name="BeforeBuild" DependsOnTargets="MyCustomBeforeBuildTarget">
</Target>
Run Code Online (Sandbox Code Playgroud)
此外,当我的包被删除时,自定义目标也会消失,这将是很好的,虽然我添加了一个条件,如果我的自定义任务DLL不存在,它应该使它忽略目标.
我可以写的最简单的Powershell nuget安装脚本是什么,它将添加我的自定义目标?我觉得这里的PowerShell脚本可能是解决方案的一部分,但我没有足够的PowerShell经验知道如何实际使用它们来编辑csproj.
我正在为一个Windows服务编写一个nuget包,我的想法是我的同事可以创建一个Windows服务安装包,并且将为他们设置所有默认的日志记录设置,entlib库和其他的house keep任务.
除了一件令我疯狂的事情之外,我已经完成了一切工作.
在我的nuget目录的content文件夹中,我有Service.cs和Service.Designer.cs这些被添加到目标csproj但它们没有相关.
当我看到csproj文件时,我看到:
<Compile Include="Service.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Service.Designer.cs" />
Run Code Online (Sandbox Code Playgroud)
但我想看到:
<Compile Include="Service.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="Service.Designer.cs">
<DependentUpon>Service.cs</DependentUpon>
</Compile>
Run Code Online (Sandbox Code Playgroud)
任何想法,非常确定它将涉及install.ps脚本,但我的powershell技能是不存在的?
顺便说一句,可以用nuget来删除/覆盖文件吗?到目前为止它似乎只是跳过了.
每当我尝试将文件添加到Visual Studio项目时,都会收到以下警告:
无法将文件[filename]添加到项目中.该文件位于项目目录树中
我该如何解决这个错误?
我刚刚VS 2015 RC在一些自动升级检查中打开了我现有的应用程序,它在项目的csproj文件中添加了以下行.
<MvcProjectUpgradeChecked>true</MvcProjectUpgradeChecked>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>4.0</OldToolsVersion>
Run Code Online (Sandbox Code Playgroud)
我想知道这些线路做了什么?假设打开解决方案的其他人可以在某些以前版本的Visual Studio中打开它,我可以安全地检查它们吗?
我无法在MSDN上找到任何关于此标记的内容
UPDATE
我刚刚在csproj修改后打开了解决方案Visual Studio 2013,它打开时没有任何问题,所以这似乎只是一个标志.但是,尽管如此,任何人都可以分享一些定义吗?
我有点困惑.我有Visual Studio 2017的新版本.并已将我的类项目(.net full 4.5)转换为新的.csproj项目格式.然后我尝试对这些项目进行实时测试,但VS现在告诉我.net核心项目jet不支持实时测试.
所以:
谢谢
使用新.csproj格式(以及旧格式),可以将文件添加到项目文件夹之外的链接:
<EmbeddedResource Include="..\..\..\Demo\Sample.cs" Link="Resources\Sample.cs" />
Run Code Online (Sandbox Code Playgroud)
也可以使用glob模式来包含多个文件:
<EmbeddedResource Include="..\..\..\Demo\*.cs" />
Run Code Online (Sandbox Code Playgroud)
但是你如何将两者结合起来呢?
<EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\*.cs" /><EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\*" /><EmbeddedResource Include="..\..\..\Demo\*.cs" Link="Resources\" />前两种只能创建一个链接文件(名称完全*.cs与*分别).第三个只是出错了.
有没有办法将globbing和链接文件组合到目标项目中的特定位置?如果没有,我如何链接目录中的所有文件而不知道他们的名字有多少或者是什么?
我目前正在开发一个名为 ABCD 的 Xamarin.Forms 项目,使用 macOS Sierra v10.12.6 和 Visual Studio (VS) for Mac v7.3.2(此处详细介绍了设置步骤)。
成功设置后,我继续如下:
右键单击主项目文件夹,我选择Options。
在Build 下,在General下,在Target Framework 下:.NET Portable: PCL 4.5 - Profile111已为我自动选择。
我将其切换到其正上方的选项:.NET Standard Platform: netstandard1.5 ; 然后选择确定。
切换这个框架后,我重建项目。重建后,出现警告:
警告 MSB3276:发现同一依赖程序集的不同版本之间存在冲突。请在项目文件中将“AutoGenerateBindingRedirects”属性设置为 true。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=294190。(MSB3276) (ABCD.iOS)
所以这可能是因为NETStandard.Library包已经过时了。
在主Packages文件夹中,右键单击NETStandard.Library 会显示版本1.6.0,但在终端中键入dotnet --version 会显示2.1.3,因此我在 VS 中更新NETStandard.Library - 接受出现的许可证。
重建后相同的警告仍然存在。
所以我转到警告提供的 …
在Visual Studio中创建新的.net框架4.5.2项目时,有没有办法在默认情况下使用新样式csproj(使用SDK,PackageReferences,并且不需要使用编译包含等)?
目前我正在创建一个.net标准项目,然后将其更改为.net 4.5.2,或者只是手动更改csproj,但即使这不是那么慢,我宁愿它会自动发生.
老式 :
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
...
Run Code Online (Sandbox Code Playgroud)
新风格:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net452</TargetFramework>
...
Run Code Online (Sandbox Code Playgroud)