Visual Studio解决方案(.sln)/ C#:使用另一个项目的dll作为参数启动一个项目

0蓝光

是否有可能从另一个项目运行带有dll参数的项目?

我的项目结构和依赖关系如下所示

在此处输入图片说明 在此处输入图片说明

如您所见,mod和游戏实现之间没有直接依赖关系。

当我点击Debug -> Start New InstanceF5或使用按钮(在此处输入图片说明)我想运行./ExampleGameInEngineA.exe GameModC.dll

我知道您可以Executable在项目设置中设置在此处输入图片说明

但是我正在寻找一种更通用的方法,该方法可以自动进行编译ExampleGameInEngineA并将其放置在与相同的目录中GameModC硬编码的目录路径也不是很好(我可以为此使用相对路径)。

出于测试目的,我们可以放心地忽略它,GameInEngineB但我仍然不希望对进行任何硬引用GameInEngineA

0蓝光

好的,我通过使用PreBuild-Event-Target自己解决了这个问题:

GameModC.csproj

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <TargetFramework>netstandard2.1</TargetFramework>
        <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
        <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
    </PropertyGroup>

    <Target Name="PreBuild" BeforeTargets="PreBuildEvent" Condition="">
        <MSBuild Projects="$(SolutionDir)ExampleGameInEngineA\ExampleGameInEngineA.csproj..." />
        <ItemGroup>
            <GameEngineAOutputFolder Include="$(SolutionDir)ExampleGameInEngineA\$(OutDir)*.*" />
        </ItemGroup>
        <Copy SourceFiles="@(GameEngineAOutputFolder)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="false" />
    </Target>

    <ItemGroup>
      <ProjectReference Include="..\GameApi\GameModdingApi.csproj" />
    </ItemGroup>

</Project>

GameInEngineA.csproj

<Project Sdk="Microsoft.NET.Sdk">

    <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
    </PropertyGroup>

    <ItemGroup>
        <ProjectReference Include="..\GameApi\GameModdingApi.csproj" />
    </ItemGroup>

</Project>

请注意AppendTargetFrameworkToOutputPath删除netcoreapp3.1netstandard2.1

但是解决方案仍然存在问题:

  • 它无法识别所做的更改ExampleGameInEngineA(需要手动重建)
  • Condition何时添加ExampleGameInEngineA始终满足(因为我有一个条件没有好主意)

我仍然愿意寻求更好的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何从同一解决方案访问另一个项目?(Visual Studio 2012)

Visual Studio 2015-如何从另一个解决方案引用项目?

从另一个解决方案加载项目的解决方案时如何停止Visual Studio 2013挂起

多项目Visual Studio解决方案无法调试一个项目dll

未解析的外部符号x-在同一解决方案中使用一个Visual Studio项目的增强测试进行另一个项目的测试代码

如何强制在Visual Studio 2013中打开解决方案文件(SLN)?

Visual Studio解决方案(.sln)文件是否对创建它们的计算机有任何提示?

如何在Visual Studio 2019中更新.sln(解决方案)文件

使Visual Studio解决方案文件(sln)始终以管理员身份执行

Visual Studio解决方案显示(0个项目)

从解决方案中构建一个Web项目,在Visual Studio Online Build Definition中使用多个Web项目

将代码从一个解决方案复制到另一个 c# (Visual Studio)

启动Visual Studio时自动打开最后一个解决方案

SonarQube / SonarLint / Visual Studio:在解决方案中的所有项目中使用一个规则集

从Visual Studio解决方案中删除项目

在Visual Studio中查看多个项目/解决方案

在Visual Studio解决方案中仅构建特定项目

Visual Studio解决方案添加多个项目

无需DLL的Visual Studio托管C ++的编译解决方案

在启动Visual Studio 2012时加载解决方案

Visual Studio在启动时自动构建解决方案

如何一次在一个解决方案中编写多个项目中的代码?[Visual Studio/Xamarin]

Visual Studio 2019 拒绝构建解决方案 C++

C ++中的Visual Studio解决方案配置值

Visual Studio 总是使用 Paket 重建解决方案

使用cmake在Mac上生成Visual Studio解决方案

使用 Visual Studio 2017 打开解决方案

如何使Visual Studio使用FAKE构建我的解决方案?

使用 XSLT 重定向 Visual Studio 解决方案文件